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] (正确使用)都是: sstrike (我的减价是正确的,以显示它的真实外观结果,它显示s或罢工,无论内部是什么它)

为什么它会用标签名称代替内部文本? 我是否在问题附近添加括号? 我可能做这一切都是错误的..


问题在于你在结束标记中添加了两个新的正则表达式组(s|strike) ,并且在结束标记中添加了(s|strike) 。 因此,在您的结果代码中,您将得到sstrike 。 您可以通过简单地使用正确的组号,修复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