RegEx带有可选部件

时间:2012-04-30 20:24:37

标签: php regex

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


模式:

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

搜索:

  

[element title = element title picture = 32] Lorem ipsum dolor [caption]摄影:John Doe [/ caption] [/ element]

     

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


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

2 个答案:

答案 0 :(得分: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看到。

答案 1 :(得分:0)

\[element title=(.*) picture=[0-9]+\](.*)(\[caption\](.)*\[\caption\])?\[/element\]