3

在 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]+不应匹配类似表达式!如何做到这一点?

4

2 回答 2

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 
于 2013-05-30T14:10:25.907 回答
0

只需使用 \d{3,0} 而不是 \d++

preg_match_all("/(?<!F)(\d{3,})([ASTCGX])+/", $test, $matches);
于 2013-05-30T14:35:50.117 回答