一个非常基本的问题,我不明白在以下正则表达式中使用管道的意义:
$menu=preg_replace("|<li><a href=\"".$base."\">(.*)</a></li>|U", "<li class=\"current\">$1</li>", $menu);
当然我知道他们的意思是多重(OR)匹配,我不确定为什么在那个位置使用,就像在正则表达式的开头“|
如果你能提供帮助,我会很高兴,我敢肯定这是一个白痴问题!
一个非常基本的问题,我不明白在以下正则表达式中使用管道的意义:
$menu=preg_replace("|<li><a href=\"".$base."\">(.*)</a></li>|U", "<li class=\"current\">$1</li>", $menu);
当然我知道他们的意思是多重(OR)匹配,我不确定为什么在那个位置使用,就像在正则表达式的开头“|
如果你能提供帮助,我会很高兴,我敢肯定这是一个白痴问题!
管道是将正则表达式与修饰符分开的分隔符(通常您会看到 / 作为分隔符,但它可以是任何单个字符)http://php.net/manual/en/regexp.reference.delimiters.php
http://php.net/manual/en/reference.pcre.pattern.modifiers.php 在那里寻找 PCRE_UNGREEDY 的 U 修饰符
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
正如 Kris 解释的那样,管道用作分隔符,而 U 修饰符用于在贪婪和懒惰之间切换量词行为。
请注意,此行最好这样写:
$menu = preg_replace('~<li><a href="' . $base . '">(.*?)</a></li>~',
'<li class="current">$1</li>', $menu);