【问题标题】:Regular expression with subexpression带有子表达式的正则表达式
【发布时间】: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" 模式并没有什么特别之处。他们只是(通常)将他们的比赛捕获以备后用。对于肯定/否定断言,它们确实非常方便,但这是相对高级的东西。

标签: php regex


【解决方案1】:

您可以通过以下方式查看所有匹配项:

print_r($matches);

你可以learn more about capturing groups in PHP here at the regular-expressions.info site.

【讨论】:

    【解决方案2】:

    这是关于子模式的 PHP 手册:http://php.net/manual/en/regexp.reference.subpatterns.php

    子模式可以让你做一些事情。当模式匹配时,您将获得整个匹配的值,以及每个子模式的值。在像这样一个非常简单的正则表达式的情况下:

    你好,我的名字是 (\w*)\。

    这样的输入:

    嗨,我叫弗雷迪。

    您的匹配结果是一个包含Hi, my name is Freddie.Freddie 的数组。

    子模式还可以帮助您定义正则表达式。如果我们改变前面的例子......

    嗨,我叫 (Fred|Shaggy)\。

    只有当给定的名字是 Freddie 或 Shaggy 时,您的正则表达式才会匹配该句子。您可以在其中加载其他各种模式以进行匹配。阅读我提供的链接,这很容易解释(他们比我做得更好)。

    最后一点 - 有时您想要捕获子模式结果;有时你只是想用它来匹配整体模式。有时两者都需要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多