0

我编写了一个正则表达式来去除 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?

4

3 回答 3

1

尝试:

$pattern = '/\[\/?(i|b|u|url(=[^\]]+)?|list|li)[\]\[]*\]/i';
于 2010-01-10T11:53:29.423 回答
0
  $pattern = "/\[\/?(i|b|u|url=(.*?)|url(?=\])|list|li)[\]\[]*\]/i";
于 2010-01-10T12:02:57.963 回答
0

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

于 2010-01-10T12:05:18.727 回答