我有一个很长的$partner
列表,写在一个公共文件中。
remove.inc
$partner =<<<EOT
"#<h1 class=\"logo\"(.*?)</h1>#s","#<h2 class=\"hidden\"(.*?)</h2>#s"
EOT;
//more $partner rules...
index.php
include(remove.inc);
$str = preg_replace(array($partner), '', $str);
这个回报:
警告:preg_replace():第12行的d:\ www \ indoor \ index.php中的未知修饰符','
答案 0 :(得分:3)
$partner
应该是一个字符串数组,但它不是:您使用HEREDOC语法将其定义为字符串。
字符串的第一个字符是双引号,正则表达式引擎将其视为分隔符。因此,当遇到下一个未转义的双引号时:
"#<h1 class=\"logo\"(.*?)</h1>#s",
^
引擎假定后面的内容必须是正则表达式修饰符。由于,
不是有效的修饰符,因此结果是错误。
正确的方法是
$partner = array(
"#<h1 class=\"logo\"(.*?)</h1>#s",
"#<h2 class=\"hidden\"(.*?)</h2>#s",
);
并用作
$str = preg_replace($partner, '', $str);
答案 1 :(得分:1)
您的heredoc字符串将包含引号和逗号(如示例中所定义)。这将导致您的常规异常实际上由引号分隔,而不是哈希标记,因此第一个常规异常在#s"
之后结束,接下来是逗号,正如您的错误消息所述,它不是有效的常规异常标志。也没有什么可以将你的heredoc表达式拆分成数组中的单独元素 - array($partner)
会导致一个数组包含一个包含整个heredoc字符串的元素。