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
我该如何解决?
遗憾的是,js 没有 regexp lookbehide。这可能会帮助您解决这个问题:
javascript regex lookbehide alternative
使用完整的字符串匹配重新启动 (\K
) 而不是无效的 variable-length 回顾。
/^(?: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()
中的模式
我的模式适用于 JavaScript。
(?<=(?:username|Email|URL)(?:\s|:))[^\n]+
但是,当我尝试在 PHP 中使用它时,我得到了这个错误:
A lookbehind assertion has to be fixed width
我该如何解决?
遗憾的是,js 没有 regexp lookbehide。这可能会帮助您解决这个问题: javascript regex lookbehide alternative
使用完整的字符串匹配重新启动 (\K
) 而不是无效的 variable-length 回顾。
/^(?: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()