我对正则表达式很陌生。只是试图分析一个可以做这样的事情的“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]
好吧,标题部分应该是可选的,两个条目都应该给出结果。我怎么能达到这个目标?
答案 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\]