我遇到了以下代码,其中包含一个我不理解的正则表达式。
具体做法是:
'#<!-- START '. $tag . ' -->(.+?)<!-- END '. $tag . ' -->#si'
PHP表示函数'preg_match'将返回以下内容:
“如果提供了匹配,那么它将填充结果 搜索。 $ matches [0]将包含与完整匹配的文本 模式,$ matches [1]将具有与第一个匹配的文本 捕获带括号的子模式,依此类推。 “
我认为
(.+?)
是一个'带括号的子模式'。我在哪里可以阅读关于子模式的内容?一个与w3schools.com不同的官方地方。
/**
* Gets a chunk of page content
* @param String the tag wrapping the block ( <!-- START tag --> block <!-- END tag --> )
* @return String the block of content
*/
public function getBlock( $tag )
{
preg_match ('#<!-- START '. $tag . ' -->(.+?)<!-- END '. $tag . ' -->#si', $this->content, $tor);
$tor = str_replace ('<!-- START '. $tag . ' -->', "", $tor[0]);
$tor = str_replace ('<!-- END ' . $tag . ' -->', "", $tor);
return $tor;
}
任何解释和链接都会有所帮助!
谢谢!
答案 0 :(得分:3)
你可以通过类似的东西看到所有的比赛:
print_r($matches);
你可以learn more about capturing groups in PHP here at the regular-expressions.info site.
答案 1 :(得分:1)
这是关于子模式的PHP手册:http://php.net/manual/en/regexp.reference.subpatterns.php
子模式让你做一些事情。当模式匹配时,您将获得整个匹配的值,以及每个子模式的值。在这样一个非常简单的正则表达式的情况下:
嗨,我的名字是(\ w *)\。
输入如下:
嗨,我的名字是弗雷迪。
您的匹配结果是一个包含Hi, my name is Freddie.
和Freddie
的数组。
子模式还可以帮助您定义正则表达式。如果我们改变前面的例子......
嗨,我的名字是(Fred | Shaggy)\。
如果给出的名字是Freddie或Shaggy,你的正则表达式只会匹配该句子。您可以在其中加载其他各种模式以匹配。阅读我提供的链接,这是很多解释(并且他们做得比我更好)。
最后的注释 - 有时你想要捕获子模式结果;有时你只是想用它来匹配整体模式。有时你想要两者。