匹配前面带有偶数“ G”的“ x”

时间:2019-01-15 04:05:42

标签: php regex

如何匹配前面带有偶数“ G”的“ x”?

例如:

x       --> Match the 'x'
Gx      --> Match nothing
GGx     --> Match the 'x'
GGGx    --> Match nothing
GGGGx   --> Match the 'x'
...

在这里,我尝试使用“背后的负面表情”:

(?<!G(GG)*)x

但是后面的*量词使宽度变为非固定宽度,因此该模式是错误的。

那我该怎么办?

4 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式,

\b(?:[Gg]{2})*\K[xX]\b

此处\b确保单词不完全匹配,(?:[Gg]{2})*确保仅匹配G之前的x偶数,并且\K匹配重置运算符确保仅匹配x,而不匹配整个字符串。

Demo

答案 1 :(得分:2)

您可以尝试以下模式:

(?<!G)(GG)*(?!G)(x)

x将在组2中。Demo

答案 2 :(得分:1)

您可以将(?<!G(GG)*)x从后面的位置移出,然后将其变成一个非捕获组,并重复0次以上,{{1} }

相反,如果断言左边不是(GG),则可以使用(?:GG)*断言它不是非空格字符,因为G表示“ ”有效,并将与\S

中的x匹配

最后使用(?<!G)忘记匹配的内容并匹配x

ax

Regex demo

答案 3 :(得分:0)

这是您要找的吗?

pcx

匹配组3应该给您x