【发布时间】:2018-03-06 12:50:03
【问题描述】:
我正在尝试使用以下示例删除与特定模式不匹配的字符:
完全匹配 4 个字母 [a-zA-Z]{4} 后跟空格 \s{1,} 的模式,然后是 4 个以字母开头的字符,最后 3 个数字 [a-zA-Z]{1}[0-9]{3}
如果我提供ABEH A501; BIOL L340; BIOL Z620; Q799; ABEH A501,它将匹配除Q799 之外的所有内容,现在,我需要从字符串中删除/替换Q799。
我尝试申请Negated Character Classes,但仍然没有得到想要的结果。
$mystring = "ABEH A501; BIOL L340; BIOL Z620; Q799; ABEH A501";
$string = preg_replace("/[^a-zA-Z]{4}\s{1,}[a-zA-Z]{1}[0-9]{3}/","",$mystring);
echo $string; //ABEH A501; BIOL L340; BIOL Z; ABEH A501
想要的结果应该是ABEH A501; BIOL L340; BIOL Z620; ABEH A501
Q799 已被删除,因此也是另一个匹配字符串的一部分,不确定这是由于错误的 regEx 还是错误的否定字符类应用。
【问题讨论】:
-
\s{1,0}是什么意思? -
至少匹配一个或多个空格?
-
由于可能会出现许多您想要的模式的错误变体,提取与
preg_match()匹配的模式不是更好吗? -
regex101.com/r/KXhIWa/3 根据这个你的正则表达式是无效的。使用 + 或 {1,}。 {1,0} 没有意义(“从 1 到 0 个字符”)
-
至少一个或多个使用
{1,}或+{1,0}我认为这意味着从1到0
标签: php regex string pattern-matching