Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 内部带有可选部分的正则表达式_Php_Regex - Fatal编程技术网

Php 内部带有可选部分的正则表达式

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

我对正则表达式相当陌生。只是试着分析一个“BB代码”,它可以做这样的事情:


模式:

\[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-非常感谢您的帮助:)