Php 正则表达式的结果是;分隔符不能是字母数字或反斜杠;
我有这个密码Php 正则表达式的结果是;分隔符不能是字母数字或反斜杠;,php,regex,delimiter,Php,Regex,Delimiter,我有这个密码 function a($menu_item, $remove_link) { $pattern = 'class="(.+)"(.+)<a.+>(.+)</a>'; if($remove_link) { return preg_replace($pattern, 'class="$1 selected"$2$3', $menu_item); //<- line 6 } return $menu_item;
function a($menu_item, $remove_link) {
$pattern = 'class="(.+)"(.+)<a.+>(.+)</a>';
if($remove_link) {
return preg_replace($pattern, 'class="$1 selected"$2$3', $menu_item); //<- line 6
}
return $menu_item;
}
它应该会回来
<li class="menuitem first selected">Home</li>;
我看到php模式必须用斜杠“分隔”,所以我尝试使用class=“/(.+)”(.+)(.+)/
,但它给出了相同的错误
我错过了什么?如何正确使用分隔符?必须在模式的开头和结尾放置模式分隔符,例如:
$pattern = '#class="(.+)"(.+)<a.+>(.+)</a>#';
作为旁白,您的模式将导致许多回溯:
$pattern = '~class="([^"]+)"([^>]*>)<a[^>]+>([^<]+)</a>~';
请参阅,它会删除错误,但不会替换文本。为什么?刚刚检查了你的更新,它不工作。你的模式是假的是什么意思?你是说这是错的吗?我用Notepad++检查了它,还制作了一个小java程序,使用相同的正则表达式,它可以工作,为什么它不能与PHP一起工作?p、 但是,您的正则表达式不起作用。@反斜杠:测试后,您的模式似乎起作用,但会导致许多回溯(正则表达式引擎必须前进才能找到匹配项)。在我的模式中,我用一个
*
替换了一个+
量词(因为在示例中,类的结尾和
之间没有任何区别),我注意到了您的更改,但它对我不起作用。
$pattern = '/class="(.+)"(.+)<a.+>(.+)<\/a>/';
$pattern = '~class="([^"]+)"([^>]*>)<a[^>]+>([^<]+)</a>~';
<?php
function a($menu_item, $remove_link) {
//$pattern = '~class="(.+)"(.+)<a.+>(.+)</a>~';
$pattern = '~class="([^"]+)"([^>]*>)<a[^>]+>([^<]+)<\/a>~';
if($remove_link) {
return preg_replace($pattern, 'class="$1 selected"$2$3', $menu_item);
}
return $menu_item;
}
$menu_item = '<li class="menuitem first"><a href="index.php">Home</a></li>';
echo a($menu_item, true);