如何纠正我的正则表达式不匹配以字符开头的特定表达式

时间:2013-05-30 13:58:41

标签: php regex

在PHP中,我试图创建一个没有成功的正则表达式,它应该匹配由数字和单个“结束”字符组成的表达式,只有数字不在F之前。这是一个匹配的字符串

$test = "123A456C789XF765S333333AF444G";

以及以下正则表达式

preg_match_all("/(?<!F)(\d+)([ASTCGX])+/", $test, $matches)

找到以下表达式:

123A
456C
789X
65S
33333A
44G

虽然我期待只有以下匹配:

123A
456C
789X
333333A

我不希望将数字\d+拆分为与正则表达式匹配。像F\d+[ACXSG]+这样的表达应该匹配!怎么做到这一点?

2 个答案:

答案 0 :(得分:4)

我建议你使用它:

preg_match_all("/(?<![\dF])(\d++)([ASTCGX])/", $test, $matches);

说明:

(?<![\dF])       # not preceded by F or a digit (numbers can't be trunked)
\d++             # one or more digit (with a possessive quantifier, optional but better)
[ASTCGX]         # one of these characters 

答案 1 :(得分:0)

只需使用\ d {3,0}代替\ d ++

preg_match_all("/(?<!F)(\d{3,})([ASTCGX])+/", $test, $matches);