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

时间:2012-03-01 01:41:32

标签: php regex preg-match-all

我正在尝试在preg_match_all的模式中包含变量。我已经尝试了几种方法,但它们似乎都没有用 - 即使模式在回声时是正确的。

这就是我所拥有的:

首次尝试(使用单引号是安全的):

    $pattern_areacode = '/\<a name\=\"'. $code . '\"\>'. $code . '\<\/a\>.*?(\<td\b[^>]*\>       (.*?)\<\/td\>).*?<\/tr\>/';
    preg_match_all($pattern_areacode, $contents, $ac_match);

问题:我打印了图案,看起来很好。然而,它没有返回任何结果。

第二次尝试(使用双倍):

    $pattern_areacode = "/\<a name\=\"$code\"\>$code\<\/a\>.*?(\<td\b[^>]*\>(.*?)\<\/td\>).*?<\/tr\>/";
    preg_match_all($pattern_areacode, $contents, $ac_match);

问题:$ get之前的双引号被转义。奇怪的。

我做了我的研究并尝试了其他一些方法,包括使用大括号{},但无济于事。

如何让它发挥作用?

谢谢!

1 个答案:

答案 0 :(得分:2)

确保您的输入已转义,并且不包含正则表达式可能解释为模式的任何内容(这可能会使您的匹配失败)。这可以使用preg_quote轻松完成。所以,如果你还没有:

$code = preg_quote($quote);

此外,我建议使用实际的HTML解析器而不是正则表达式匹配,也许会使用DOMDocument