我的模式在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+
匹配行中不包含的其余非垂直字符(如r
和n
)。
请参阅正则表达式
的更广泛的canonical:可变长度查看断言后面的替代方法为了防止脚本错误地匹配值而不是匹配标签,请注意使用^
和m
修饰符。这将确保您匹配出现在一行开头的标签。
如果没有起始锚,Somethingelse: url whoops
将匹配whoops
。
要在PHP中进行多次匹配,不使用g
模式修饰符。相反,应用preg_match_all()
遗憾的是,js没有后台regexp。这可能会帮助你解决这个问题:Javascript regex lookbehind