一个非常基本的问题,我在下面的正则表达式中没有得到Pipe的用法:
$menu=preg_replace("|<li><a href=\"".$base."\">(.*)</a></li>|U", "<li class=\"current\">$1</li>", $menu);
当然我知道它们意味着多个(OR)匹配,我不知道为什么在那个位置使用,就像在正则表达式的最开头一样“|
如果你能提供帮助,我会很高兴,我确信这是一个愚蠢的问题!
答案 0 :(得分:2)
管道是分隔符,从修饰符中分离出正则表达式(通常你会看到/作为分隔符,但它可以是任何单个字符)http://php.net/manual/en/regexp.reference.delimiters.php
http://php.net/manual/en/reference.pcre.pattern.modifiers.php 在那里查找U修饰符,即PCRE_UNGREEDY
答案 1 :(得分:1)
字母U是用于对模式匹配行为进行修改的修饰符。
我 - 忽略大小写,不区分大小写
U - 不确定地搜索
s - 包含新行
m - 多行
x - 扩展了评论和空白
e - 支持将替换评估为PHP代码。 (仅限preg_replace)
S - 模式的额外分析
详见:
http://www.phpro.org/tutorials/Introduction-to-PHP-Regex.html
答案 2 :(得分:1)
正如Kris解释的那样,管道用作分隔符,U修饰符用于在贪婪和懒惰之间切换量词行为。
请注意,此行可以更好地编写如下:
$menu = preg_replace('~<li><a href="' . $base . '">(.*?)</a></li>~',
'<li class="current">$1</li>', $menu);