2012-03-01 6 views
0

私はpreg_match_allのパターンに変数を含めることを試みています。私はいくつかの方法を試してきましたが、たとえパターンがエコー時に正しい場合でも、どれも動作していないようです。ここでPHPで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); 

問題:二重引用符を前に$脱出します。奇妙な。

私は自分の研究を行い、中括弧{}を使うことを含め、他の方法も試してみましたが、無駄にしました。

これを動作させるにはどうすればよいですか?

ありがとうございます!

+1

を使用してに見て、試合はRegexとは対照的に、私は実際のHTMLパーサを使用することをお勧めしますXMLとHTMLを正規表現で解析するのはなぜ難しいのですか?](http://stackoverflow.com/questions/701166/can-you-provide-some-examples-of-why-it-is-hard-to-parse -xml-and-html-with-reg) – deceze

+2

"それはうまく見えました" ..それは明らかにうまくいきませんでした。さもなければそれは働くだろう。 –

+1

あなたはあなたのエスケープに少し過度に妄想的なように見えます。私はあなたが '<'または '='をエスケープする必要はないと思います。 '$ code'と' $ contents'のサンプル値を与えることができれば、私たちが手助けするのが簡単になります。 –

答えて

2

あなたの入力がエスケープされ、正規表現がパターンとして解釈する可能性のあるものが含まれていないことを確認してください(一致しない可能性があります)。これは簡単にpreg_quoteを使用して行うことができます。だから、どうかではなく、すでに持っている:

$code = preg_quote($quote); 

をまた、多分また、あなたは、いくつかの例を提供することができます[参照DOMDocument

+0

引数は3桁の整数ですので、エスケープする必要はありません – alan

関連する問題