在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]+
这样的表达应该不匹配!怎么做到这一点?
答案 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);