2011-01-14 12 views
1

regexpを使用して大きな表のファイルからコンテンツを抽出し、PHPを使用してデータを処理したいと考えています。RegExpでHTMLタグの内容を取得する

は、ここで私が一致したいデータです:

<td>Current Value: </td><td>100.178</td> 

私はテキストと一致して取得するために、この正規表現を使用してみました:私は「不明な修飾語」警告と私を取得しかし

preg_match("<td>Current Value: </td><td>(.+?)</td>", $data, $output); 

をvariable $ outputが空になります。

私はこれをどのように達成できますか?ソリューションの仕組みの簡単な概要を教えてください。なぜ私のコードが理解できなかったのか理解できますか?

答えて

2

あなたはあなたの正規表現の周りに区切り文字を追加する必要があります。

preg_match("#<td>Current Value: </td><td>(.+?)</td>#", $data, $output); 

標準区切り文字は/ですが、(正規表現自体はスラッシュが含まれているため、ここでは理にかなって)希望する場合は、他の英数字以外の文字を使用することができます。あなたのケースでは、正規表現エンジンはデリミタとして山括弧を使いたいと思って失敗しました。

もう1つのヒント(「正規表現を使用してHTMLを解析しないでください」(このような特定のケースでは完全に問題ありません)):(.*?)の代わりに([^<>]+)を使用してください。これにより、正規表現がネストされたタグ間を移動することはなくなります。ネストされたタグは、マークアップ言語を扱う際の共通のエラー源です。

+0

は、これが働いていました。デリミタはいつ必要ですか?彼らはどんなキャラクターでもありますか? – MarathonStudios

+0

これらは常に(PHPで)必要であり、英数字以外の任意の文字にすることができます。 –

1

DOMパーサーを使用することをお勧めします。あなたの生活を楽にし、コードをよりきれいに保ち、維持しやすくなります。

http://simplehtmldom.sourceforge.net/

これは子要素にアクセスするためのいくつかの例があります: http://simplehtmldom.sourceforge.net/manual.htm#section_traverse

+0

これは私がこの特定のプロジェクトに必要なものより少し上ですが、これは美しいライブラリのように見えます。私は将来それを使用するだろうと確信しています! – MarathonStudios

+0

@マラソンそうではありません。実際には、それは駄目です(ごめんなさい@jmort、それは本当に何も個人的ではありません)。より良い選択肢については、http://stackoverflow.com/questions/3577641/best-methods-to-parse-html/3577662#3577662をご覧ください。 – Gordon

+0

@Gordon - LOL心配はありません。文字列の解析は本当にあまり良くありません。私はそれがSimpleXMLのすべてであることを知らなかった。どのように嫌なことか。 – jmort253

関連する問題