-2

我有一个很长的 $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(): Unknown modifier ',' in d:\www\indoor\index.php 第 12 行

4

2 回答 2

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);
于 2013-01-27T15:58:20.240 回答
1

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

于 2013-01-27T15:59:18.587 回答