编程语言
首页 > 编程语言> > PHP / Regex:bbcode [s]或[strike]的简单正则表达式无效

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