Php 内部带有可选部分的正则表达式
我对正则表达式相当陌生。只是试着分析一个“BB代码”,它可以做这样的事情:Php 内部带有可选部分的正则表达式,php,regex,Php,Regex,我对正则表达式相当陌生。只是试着分析一个“BB代码”,它可以做这样的事情: 模式: \[element title=(.*)picture=(\d+)](.*)(?:\[caption](.*):?\[/caption])?\[/caption].* 搜索: [element title=element title picture=32]Lorem ipsum dolor[caption]约翰·多伊摄 [element title=element title picture=32]Lore
模式:
\[element title=(.*)picture=(\d+)](.*)(?:\[caption](.*):?\[/caption])?\[/caption].*
搜索: [element title=element title picture=32]Lorem ipsum dolor[caption]约翰·多伊摄 [element title=element title picture=32]Lorem ipsum dolor[/element]
嗯,标题部分应该是可选的,两个条目都应该给出结果。我怎样才能做到这一点呢?这个怎么样:
\[element title=(.*) picture=[0-9]+\](.*)(\[caption\](.)*\[\caption\])?\[/element\]
\[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
将包含多个元素。这些字符串在正则表达式中被圆括号(
和)
包围。其中之一是标题文本
这里可以看到程序执行和输出 这个怎么样:
\[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
将包含多个元素。这些字符串在正则表达式中被圆括号(
和)
包围。其中之一是标题文本
这里可以看到程序执行和输出 标题是否总是在结尾,紧靠
[/element]
之前?是的,标题总是紧靠[/element]-如果给出了标题。请检查此处如何解析BBCode:标题是否总是在结尾,紧靠[/element]
之前?是的,标题总是紧靠[/element]之前-如果给出了标题。请在此处检查如何解析BBCode:您是对的,两个都匹配。但是,如果可以的话,如何提取组中的“标题”?@snuffer.ch:您使用的是什么语言?PHP?是的,我正在使用PHP-非常感谢你的帮助:)你说得对,两个都匹配。但是,如果可以的话,如何提取组中的“标题”?@snuffer.ch:您使用的是什么语言?PHP?是的,我正在使用PHP-非常感谢您的帮助:)