1

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

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

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

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

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

4

3 回答 3

2

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

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

于 2013-06-28T19:34:41.307 回答
1

The letter U is a modifier for perform modifications to the behaviour of the pattern matching.

i - Ignore Case, case insensitive

U - Make search ungreedy

s - Includes New line

m - Multiple lines

x - Extended for comments and whitespace

e - Enables evaluation of replacement as PHP code. (preg_replace only)

S - Extra analysis of pattern

See more at:

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

于 2013-06-28T19:42:43.183 回答
1

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

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

$menu = preg_replace('~<li><a href="' . $base . '">(.*?)</a></li>~',
                     '<li class="current">$1</li>', $menu);
于 2013-06-28T19:46:28.760 回答