我正在尝试在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之前的双引号被转义。奇怪的。
我做了我的研究并尝试了其他一些方法,包括使用大括号{},但无济于事。
如何让它发挥作用?
谢谢!
答案 0 :(得分:2)
确保您的输入已转义,并且不包含正则表达式可能解释为模式的任何内容(这可能会使您的匹配失败)。这可以使用preg_quote
轻松完成。所以,如果你还没有:
$code = preg_quote($quote);
此外,我建议使用实际的HTML解析器而不是正则表达式匹配,也许会使用DOMDocument