PHP/正则表达式 : simple regex for bbcode [s] or [strike] fails to work

标签 php regex bbcode

对于一个愚蠢的 bbcode 解析器,我想将两个定义添加到一个中,我最初的 preg_replace 定义是这样的:

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

这可行,我希望用户能够使用 [s][strike] 来启动该格式的文本,所以我自然地添加了像这样的想法会起作用:

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

不幸的是,失败了,[s][strike] (正确使用)都生成: sstrike (我的 markdown 正确地显示了其真实的结果,无论里面有什么,它都会显示 s 或 Strike)

为什么它用标签名称替换内部文本?我在 s|strike 周围添加括号有问题吗?我可能做错了..

最佳答案

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

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

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

关于PHP/正则表达式 : simple regex for bbcode [s] or [strike] fails to work,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4245008/

相关文章:

php - 从相对路径解析绝​​对路径

正则表达式计数不包括空格的位数

php - 从字符串中删除所有 BBCode,除了 [quote]

PHP preg_split : Split string by other strings

regex - 是否有正则表达式来匹配最多 7 位数字的 float ?

php - 解析bbcode的最佳方式

jquery - 当我在页脚中添加在线 jquery 库时,bbcode 不起作用

php - 使用别名从 View 更新 MySQL 表

php - Yii 如何从数据库中检索数据并在 View 中显示

php - NetBeans PHP - 重构