Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正则表达式的结果是;分隔符不能是字母数字或反斜杠;_Php_Regex_Delimiter - Fatal编程技术网

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);