为什么在php中使用preg_match_all中的变量会失败?

为什么在php中使用preg_match_all中的变量会失败?,php,regex,preg-match-all,Php,Regex,Preg Match All,我正在尝试在我的模式中包含变量,以用于preg_match_all。我试过几种方法,但似乎都不管用——即使在echo上的模式是正确的 以下是我所拥有的: 第一次尝试(使用单引号以确保安全): $pattern\u区域代码='/\'$代码。“\.*?(\]*\> (.*?)\).*?/'; preg_match_all($pattern_areacode,$contents,$ac_match); 问题:我打印了图案,看起来很好。但它没有返回任何结果 第二次尝试(使用双精度): $p

我正在尝试在我的模式中包含变量,以用于preg_match_all。我试过几种方法,但似乎都不管用——即使在echo上的模式是正确的

以下是我所拥有的:

第一次尝试(使用单引号以确保安全):

$pattern\u区域代码='/\'$代码。“\.*?(\]*\>       (.*?)\).*?/';
preg_match_all($pattern_areacode,$contents,$ac_match);
问题:我打印了图案,看起来很好。但它没有返回任何结果

第二次尝试(使用双精度):

$pattern\u areacode=“/\$code\.*?(\]*\>(.*?).*?/”;
preg_match_all($pattern_areacode,$contents,$ac_match);
问题:$前的双引号被转义。奇怪

我做了研究,还尝试了其他一些方法,包括使用大括号{},但都没有用

我怎样才能让它工作


谢谢

确保您的输入被转义,并且不包含任何正则表达式可能解释为模式的内容(这可能会导致匹配失败)。这可以很容易地使用。因此,如果您还没有:

$code = preg_quote($quote);

另外,我建议使用一个实际的HTML解析器,而不是正则表达式匹配,也许可以查看使用

也可以查看“它看起来很好”。。很明显,这不好。否则就行了。看来你逃到那里有点太偏执了。我认为即使模式在回显时是正确的,也不需要转义。--请给出一个正确模式和文本的示例,它应该匹配参数是一个3位整数,因此我认为转义是不必要的
    $pattern_areacode = "/\<a name\=\"$code\"\>$code\<\/a\>.*?(\<td\b[^>]*\>(.*?)\<\/td\>).*?<\/tr\>/";
    preg_match_all($pattern_areacode, $contents, $ac_match);
$code = preg_quote($quote);