【问题标题】:Not understanding a regular expression in php preg_replace不理解 php preg_replace 中的正则表达式
【发布时间】:2013-06-28 19:32:55
【问题描述】:

一个非常基本的问题,我不明白在以下正则表达式中使用管道的意义:

$menu=preg_replace("|<li><a href=\"".$base."\">(.*)</a></li>|U", "<li class=\"current\">$1</li>", $menu);  

当然我知道它们的意思是多重(或)匹配,我不确定为什么在那个位置使用 are,就像在正则表达式的开头“|

http://www.paitadesign.com/blog/php-e-css-come-evidenziare-la-pagina-corrente-nel-menu-di-navigazione/

如果你能帮忙我会很高兴,我敢肯定这是个白痴问题!

【问题讨论】:

    标签: php regex preg-replace pipe


    【解决方案1】:

    管道是分隔正则表达式和修饰符的分隔符(通常您会看到 / 作为分隔符,但它可以是任何单个字符)http://php.net/manual/en/regexp.reference.delimiters.php

    http://php.net/manual/en/reference.pcre.pattern.modifiers.php 在那里寻找 PCRE_UNGREEDY 的 U 修饰符

    【讨论】:

      【解决方案2】:

      字母U是对模式匹配行为进行修改的修饰符。

      i - 忽略大小写,不区分大小写

      U - 使搜索不贪婪

      s - 包括新行

      m - 多行

      x - 扩展为 cmets 和空格

      e - 启用作为 PHP 代码的替换评估。 (仅限 preg_replace)

      S - 模式的额外分析

      查看更多:

      http://www.phpro.org/tutorials/Introduction-to-PHP-Regex.html

      【讨论】:

        【解决方案3】:

        正如 Kris 解释的那样,管道用作分隔符,而 U 修饰符用于在贪婪和懒惰之间切换量词行为。

        请注意,此行最好这样写:

        $menu = preg_replace('~<li><a href="' . $base . '">(.*?)</a></li>~',
                             '<li class="current">$1</li>', $menu);
        

        【讨论】:

          猜你喜欢
          • 2011-05-20
          • 2023-04-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多