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


How to correct my regex to not match particular expressions starting with a character

在PHP中,我试图创建一个没有成功的正则表达式,它应该匹配由数字和单个'结束'字符组成的表达式,只有数字不是由F开头。下面是一个匹配

的字符串示例
$test = "123A456C789XF765S333333AF444G";

和后面的regex

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

查找以下表达式:

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

而我期望只匹配以下内容:

123A
456C
789X
333333A

我不希望将数字'd+拆分以匹配正则表达式。像F'd+[ACXSG]+这样的表达式应该匹配而不是 !如何做到这一点?

我建议你这样做:

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 

用'd{3,0}代替'd++

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