1

我对正则表达式很陌生。只是试图分析一个“BB-Code”,它可以做这样的事情:


图案:

\[element title=(.*)picture=(\d+)](.*)(?:\[caption](.*):?\[/caption])?\[/caption].*

搜索:

[元素标题=元素标题图片=32]Lorem ipsum dolor[标题]摄影:John Doe[/caption][/element]

[元素标题=元素标题图片=32]Lorem ipsum dolor[/元素]


好吧,标题部分应该是可选的,两个条目都应该给出结果。我怎样才能做到这一点?

4

2 回答 2

1

这个怎么样:

\[element title=(.*)picture=(\d+)\](.*?)(\[caption\](.*)\[/caption\])?\[/element\]

它将匹配两者:

[element title=element title picture=32]Lorem ipsum dolor[caption]Photo by John Doe[/caption][/element]

[element title=element title picture=32]Lorem ipsum dolor[/element]

例子

在 PHP 中,你可以这样使用它:

$regex = '#\[element title=(.*)picture=(\d+)\](.*?)(\[caption\](.*)\[/caption\])?\[/element\]#i';
$text = '[element title=element title picture=32]Lorem ipsum dolor[caption]Photo by John Doe[/caption][/element]';    

preg_match ( $regex, $text, $match );

print_r( $match );

该数组$match将有几个元素。这些是用圆括号()正则表达式包围的字符串。其中之一是标题文本。

程序执行和输出可以在这里看到 http://ideone.com/vQ1T0

于 2012-04-30T20:36:50.920 回答
0
\[element title=(.*) picture=[0-9]+\](.*)(\[caption\](.)*\[\caption\])?\[/element\]
于 2012-04-30T20:36:37.970 回答