对于一个愚蠢的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添加括号吗?我可能做错了..
答案 0 :(得分:3)
问题是您在开始标记中添加了两个新的正则表达式组(s|strike)
,在结束标记中添加了(s|strike)
。因此,在生成的代码中,您将获得s
或strike
。您只需使用正确的组号2
即可解决此问题。
另一种方法是通过在开头添加?:
来使新组不引用,但我想第一个解决方案更容易理解:
#\[(?:s|strike)\](.*?)\[/(?:s|strike)\]#si