【发布时间】:2013-08-12 20:59:59
【问题描述】:
我遇到了以下代码,其中包含我不理解的正则表达式。
具体来说:
'#<!-- 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;
}
任何解释以及链接都会有所帮助!
谢谢!
【问题讨论】:
-
()"sub" 模式并没有什么特别之处。他们只是(通常)将他们的比赛捕获以备后用。对于肯定/否定断言,它们确实非常方便,但这是相对高级的东西。