Regex Error: A lookbehind assertion has to be fixed width

Regex Error: A lookbehind assertion has to be fixed width

我的模式适用于 JavaScript。

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

但是,当我尝试在 PHP 中使用它时,我得到了这个错误:

A lookbehind assertion has to be fixed width

我该如何解决?

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

遗憾的是,js 没有 regexp lookbehide。这可能会帮助您解决这个问题: javascript regex lookbehide alternative

使用完整的字符串匹配重新启动 (\K) 而不是无效的 variable-length 回顾。

Regex 101 Demo

/^(?:username|Email|Url):? *\K\V+/mi

通过在冒号和 space 后跟 ?*.

使它们成为可选的

使用\V+匹配行中排除的剩余non-vertical(如\r\n)个字符。

查看更广泛的规范:Variable-length lookbehind-assertion alternatives for regular expressions


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

没有行锚开始,Somethingelse: url whoops 将匹配 whoops

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

中的模式