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和罢工(我的降价是正确的,以显示其真实的结果,它显示s或罢工无论内部是什么它)
为什么用标签名称替换内部文本呢?我的问题是围绕s添加括号吗?我可能做错了..
解决方法:
问题是您在开始标记中添加了两个新的正则表达式组(s | strike),并在结束标记中添加了(s | strike).因此,在您生成的代码中,您将得到s或strike.您可以通过简单地使用正确的组号来解决这个问题,2.
另一种方法是通过在开头添加?:来使新组不引用,但我想第一个解决方案更容易理解:
#\[(?:s|strike)\](.*?)\[/(?:s|strike)\]#si
标签:php,regex,bbcode 来源: https://codeday.me/bug/20191006/1859453.html