PHP regexp用于"字符串或模式的开头"

fra*_*dow 3 php regex preg-match

有没有办法(除了做两个单独的模式匹配)在PHP中使用preg_match来测试字符串的开头或模式?更具体地说,我经常发现自己想要测试我有一个匹配的模式,其前面没有东西,如

preg_match('/[^x]y/', $test)

(也就是说,如果它前面没有x,则匹配y),但如果它出现在$ test的开头(当它也不在x之前,但前面没有任何字符,那么也匹配y,所以[^ x]构造不起作用,因为它总是需要一个字符来匹配它.

在字符串的末尾有一个类似的问题,以确定是否发生了一个没有其他模式的模式.

Jon*_*Jon 6

您可以简单地使用标准的交替语法:

/(^|[^x])y/
Run Code Online (Sandbox Code Playgroud)

这将匹配y输入开头之前或者除了之外的任何字符x.

当然在这个特定的例子中,^锚的替代方案如此简单,你也可以很好地使用负面的lookbehind:

/(?<!x)y/
Run Code Online (Sandbox Code Playgroud)