将 BBCode [link='www.example.com]example[/link] 转换为 HTML example
我的正则表达式有问题。我想翻译 BBCode 链接标签,例如:
[link=www.stackoverflow.com]Stack-Overflow[/link]
转换
为 HTML 链接:
Stack-Overflow
。
在我的字符串中,可以在 BBCode 中创建多个链接。 我还需要一个将 HTML 转换回 BBCode 的函数。
我的功能是:
-
BBCode To HTML:
$Text = preg_replace( '/\[链接=([^]+).*\](.*)\[\/链接\]/', '$2', $文本 );
-
HTML 转 BBCode:
$Text = preg_replace( '/\(.*)\<\/a\>/Usi', '[link=$1]$2[/link]', $文本 );
我对这些功能的问题是,当我有多个链接要转换时,它不起作用。
当我将一个链接翻译为 HTML 并且我想翻译回来时,我只有该链接的第一个字符。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
至于你的第一个问题,
*
是贪婪的,所以它捕获第一个和最后一个链接之间的所有内容。一个简单的解决方案是使用非贪婪限定符,或者不允许在您的组中使用[]
:类似地,反之亦然:
这是非贪婪版本。它允许在链接中使用
[]
,甚至更短:As for your first problem,
*
is greedy, so it catches everything between the first and last links. A simple solution is to use a non-greedy qualifier, or to not allow[]
in your groups:Similarly, for the other way around:
Here's the non-greedy version. It allows
[]
in links, and is even shorter:你的问题在于贪婪。*
使用 ?使其不贪婪。
Your problem is with the greedy .*
Use ? to make it non greedy.