我正在尝试创建类似 smarty 的解析器。对于非常小的代码部分,并且不想实现巨大的类似 smarty 的解析器。
我想出的是:
(?:([a-zA-Z0-9]+)=(?:([^\v '"]+)|"(.*?)"|'(.*?)')|([a-zA-Z0-9]+))
On https://regex101.com/r/l5FI5f/2/看起来不错。每场比赛都是 1 或 2 个条目 + 完整匹配。
当我复制 PHP 代码时,事情看起来有所不同......
array (size=5)
0 => string 'xddss='asdasda'' (length=15)
1 => string 'xddss' (length=5)
2 => string '' (length=0)
3 => string '' (length=0)
4 => string 'asdasda' (length=7)
不确定索引 2 和 3 来自哪里......
你需要使用分支重置组:
(?|([a-zA-Z0-9]+)=(?|([^\v '"]+)|"(.*?)"|'(.*?)')|([a-zA-Z0-9]+))
^ ^
See the 正则表达式演示.
来自参考:
备择方案在分支重置组内共享相同的捕获组。语法是(?|regex)
where (?|
打开组,regex 是任何正则表达式。如果您在分支重置组内不使用任何交替或捕获组,则其特殊功能不会发挥作用。然后它充当非捕获组.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)