对于一个愚蠢的 bbcode 解析器,我想将两个定义添加到一个中,我最初的 preg_replace 定义是这样的:
'#\[s\](.*?)\[/s\]#si', '<strike>\\1</strike>'
这可行,我希望用户能够使用[s]
or [strike]
以这种格式启动文本,所以我自然地添加了类似这样的内容,认为它会起作用:
'#\[(s|strike)\](.*?)\[/(s|strike)\]#si', '<strike>\\1</strike>'
不幸的是,这失败了,而不是你所期望的,两者[s]
and [strike]
(正确使用) make: s
罢工>和strike
(我的降价是正确的,可以显示其真实的结果,它显示 s 或 Strike,无论里面有什么)
为什么它用标签名称替换内部文本?我在 s|strike 周围添加括号有问题吗?我可能做错了这一切。
问题是您添加了两个新的正则表达式组,(s|strike)
在开始标签中和(s|strike)
在结束标签中。所以在你的结果代码中你会得到s
or strike
。您只需使用正确的组号即可解决此问题,2
.
另一种方法是通过添加一个新组来使该新组成为非引用组?:
到一开始,但我想第一个解决方案更容易理解:
#\[(?:s|strike)\](.*?)\[/(?:s|strike)\]#si
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)