Regex错误:向后看断言必须是固定宽度



我的模式在JavaScript中工作。

(?<=(?:username|Email|URL)(?:s|:))[^n]+

然而,当我尝试在PHP中使用它时,我得到这个错误:

look - behind断言必须是固定宽度

我该如何修复它?

演示:https://regex101.com/r/x2W3S5/1

使用完整的字符串匹配重启(K),而不是无效的变长后看。

Regex 101 Demo

/^(?:username|Email|Url):? *KV+/mi

通过在冒号和空格后面加上?*,使它们成为可选的。

使用V+匹配行中不包含的其余非垂直字符(如rn)。

请参阅正则表达式

的更广泛的canonical:可变长度查看断言后面的替代方法

为了防止脚本错误地匹配值而不是匹配标签,请注意使用^m修饰符。这将确保您匹配出现在一行开头的标签。

如果没有起始锚,Somethingelse: url whoops将匹配whoops

要在PHP中进行多次匹配,不使用g模式修饰符。相反,应用preg_match_all()

中的模式

遗憾的是,js没有后台regexp。这可能会帮助你解决这个问题:Javascript regex lookbehind

最新更新