PHP / Regex:bbcode [s]或[strike]的简单正则表达式无效

时间:2010-11-22 11:38:42

标签: php regex bbcode

对于一个愚蠢的bbcode解析器,我想在一个中添加两个定义,我的原始定义是preg_replace:

'#\[s\](.*?)\[/s\]#si', '<strike>\\1</strike>'

这是有效的,我希望用户能够使用[s][strike]来启动该格式的文本,所以我自然会添加这样的东西,认为它会起作用:

'#\[(s|strike)\](.*?)\[/(s|strike)\]#si', '<strike>\\1</strike>'

不幸的是,失败了,而不是你期望的,[s][strike](使用得当)使得: s {{ 1}} (我的降价是正确的,以显示其真实的结果,它显示s或打击,无论其内部是什么)

为什么用标签名称替换内部文本呢?我的问题是围绕s添加括号吗?我可能做错了..

1 个答案:

答案 0 :(得分:3)

问题是您在开始标记中添加了两个新的正则表达式组(s|strike),在结束标记中添加了(s|strike)。因此,在生成的代码中,您将获得sstrike。您只需使用正确的组号2即可解决此问题。

另一种方法是通过在开头添加?:来使新组不引用,但我想第一个解决方案更容易理解:

#\[(?:s|strike)\](.*?)\[/(?:s|strike)\]#si