在“标签”之间获取文字[b]文字[/ b]

时间:2011-04-13 21:51:55

标签: php regex

如何在本文中的“标签”[b] [/ b]之间获取文字?

Here is some
[b]
bold text [b]abcd[/b]
[/b]

and here is [b]another bold text[/b]

我得知

  • 粗体文字[b] abcd [/ b]
  • abcd(我会用递归得到这个)
  • 另一个粗体文字

请帮助正则表达!

谢谢!

2 个答案:

答案 0 :(得分:1)

嵌套结构很容易与PHP中可用的(非REGULAR)递归模式匹配(即(?R)(?1)(?2)等。例如,以下正则表达式匹配(可能嵌套的)粗体BBCode标记:

$re = '%\[B\]((?:(?R)|[^\[]*(?:\[(?!/?B\b)[^\[]*)*)*)\[/B\]%i';

[B]..[/B]标记之间的内容位于捕获组$1中。

那些说无法做到的人是错误的。

我刚刚为FluxBB开源论坛软件完成的新解析器使用了这个正则表达式的更高级版本。如果您有兴趣查看它,请参阅:New FluxBB 2011 Parser Regular Expressions。 (但是公平的警告:这不适用于正则表达的弱点!)

P.S。新闻快闪! Perl和.NET也可以这样做。

答案 1 :(得分:0)

正则表达式是完成此任务的错误工具。如果您可以控制输入格式,为什么不使用正确的XML:

Here is some
<b>
bold text <b>abcd</b>
</b>

and here is <b>another bold text</b>

然后use an XML parser