0

正規表現の達人に簡単な質問があります。はい...ここに投稿する前に、正規表現のいくつかの異なるバリエーションを試しました。私の正規表現の無知を許してください。これはPHPをターゲットにしています。

私は次のHTMLを持っています:

<div>
    <h4>
        <a href="somelink.html">some text blah</a>
    </h4>
    I need this text<br />I need this text too.<br />
</div>
<div>
    <h4>
        <a href="somelink.html">some text blah</a>
    </h4>
    I need this text<br />I need this text too.<br />
</div>
<div>
    <h4>
        <a href="somelink.html">some text blah</a>
    </h4>
    I need this text<br />I need this text too.<br />
</div>

私が試した中で最もうまくいくように思われたもの:

 preg_match_all('/<div><h4><a href=".*">.*<\/a><\/h4>(.*)<br \/>(.*)<br \/>/', $haystack, $result);

上記は何も返しません。

それで、私はこれを試して、最初のグループを一致させましたが、2番目のグループを取得できませんでした.

preg_match_all('/<div><h4><a href=".*">.*<\/a><\/h4>(.*)<br \/>/', $haystack, $result);

ありがとうございました!

4

3 に答える 3

2

正規表現は素晴らしいです。ただし、パーサーを使用して対処するのが最適な場合もあります。マークアップはその一例です。

正規表現を使用する代わりに、http: //simplehtmldom.sourceforge.net/ のような HTML パーサーを使用します。

ただし、この特定のケースで正規表現を使用することを主張する場合は、次のパターンを使用できます。

if (preg_match('%</h4>(\\r?\\n)\\s+(.*?)(<br />)(.*?)(<br />)%', $subject, $regs)) {
    $first_text_string = $regs[2];
    $second_text_string = $regs[4];
} else {
    //pattern not found
}
于 2013-09-24T00:45:47.540 に答える