PHP / Regex:bbcode [s]或[strike]的简单正则表达式无法正常工作
对于一个愚蠢的bbcode解析器,我想将两个定义添加到一个中,我的原始定义是preg_replace:
'#[s](.*?)[/s]#si', '<strike>1</strike>'
而且这个工作,我希望用户能够使用[s]
[strike]
以这种格式发起文本,所以我自然而然地添加了这样的东西,认为它会起作用:
'#[(s|strike)](.*?)[/(s|strike)]#si', '<strike>1</strike>'
不幸的是,这并不是你所期望的,而是[s]
和[strike]
(正确使用)都是: s
和strike
(我的减价是正确的,以显示它的真实外观结果,它显示s或罢工,无论内部是什么它)
为什么它会用标签名称代替内部文本? 我是否在问题附近添加括号? 我可能做这一切都是错误的..
问题在于你在结束标记中添加了两个新的正则表达式组(s|strike)
,并且在结束标记中添加了(s|strike)
。 因此,在您的结果代码中,您将得到s
或strike
。 您可以通过简单地使用正确的组号,修复2
。
另一种方法是通过在开始时添加一个?:
来使这个新组无法引用,但我想第一个解决方案更容易理解:
#[(?:s|strike)](.*?)[/(?:s|strike)]#si
链接地址: http://www.djcxy.com/p/5077.html
上一篇: PHP/Regex: simple regex for bbcode [s] or [strike] fails to work
下一篇: Regular expression pattern not matching anywhere in string