我编写了一个正则表达式来去除 BBCode 标签 - 它只是去除允许的标签(以便稍后计算没有标签的字符串长度)。

我不是正则表达式方面的专家 - 所以一个小时后我发现这非常有效:

$pattern = "/\[\/?(i|b|u|url(.*?)|list|li)[\]\[]*\]/i";
$stripped = preg_replace($pattern, '', $text);

它只删除允许的六个标签(没有更多 - 这是应该的)和特殊标签“url”,可以像“url=”一样扩展http://someurl'.

IE。

in:  [url=someurl]Lorem[/url] ipsum [test]dolor[/test] sit [b]amet[/b].
out: Lorem ipsum [test]dolor[/test] sit amet.

但问题是,它不仅删除了“url=[sometext]”,还删除了“urlipsum”。我尝试添加一个“=”进行解析,但无法达到目的。

有人提示我如何仅在带有 = 的情况下删除 url 吗?

有帮助吗?

解决方案

尝试:

$pattern = '/\[\/?(i|b|u|url(=[^\]]+)?|list|li)[\]\[]*\]/i';

其他提示

  $pattern = "/\[\/?(i|b|u|url=(.*?)|url(?=\])|list|li)[\]\[]*\]/i";

您可能想要更改量词的“贪婪”,尝试添加“U”模式修饰符或删除“.*?”中的问号,请参阅 PHP文档.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top