preg replace - php preg_replace(): 未知修饰符 ','.


preg replace - php preg_replace(): Unknown modifier ','

我有一个很长的$partner列表,写在一个公共文件中。

删除.inc

$partner =<<<EOT
"#<h1 class='"logo'"(.*?)</h1>#s","#<h2 class='"hidden'"(.*?)</h2>#s"
EOT;
//more $partner rules...

索引.php

include(remove.inc);
$str = preg_replace(array($partner), '', $str);

此返回:

警告:preg_replace():第 12 行 d:''www''indoor''index.php 中的未知修饰符 ','

$partner应该

是一个字符串数组,但事实并非如此:你正在使用HEREDOC语法将其定义为字符串。

字符串的第一个字符是双引号,正则表达式引擎将其视为分隔符。因此,当遇到下一个未转义的双引号时:

"#<h1 class='"logo'"(.*?)</h1>#s",
                                ^

引擎假定后面的任何内容都必须是正则表达式修饰符。由于,不是有效的修饰符,因此结果是错误。

正确的方法是

$partner = array(
    "#<h1 class='"logo'"(.*?)</h1>#s",
    "#<h2 class='"hidden'"(.*?)</h2>#s",
);

并用作

$str = preg_replace($partner, '', $str);

您的 heredoc 字符串将在定义时包含引号和逗号,如您的示例所示。这将产生常规异常实际上由引号而不是哈希标记分隔的效果,因此第一个常规异常在 #s" 之后结束,接下来是一个逗号,正如您的错误消息所述,这不是有效的常规异常标志。也没有什么可以将您的 heredoc 表达式拆分为数组中的单独元素 — array($partner)会导致一个数组包含一个包含整个 heredoc 字符串的单个元素。