2

このhtml構造で「データ」をキャプチャするために使用preg_matchしていますが、現在は何も返されていません。これは空白に起因している可能性がありますか?

何が問題なのか疑問に思っていpreg_matchますか?

html

  <td><strong>Title</strong></td>

                    <td>Data</td>

php

preg_match("~<td><strong>Title</strong></td>

                    <td>([a-zA-Z0-9 -_]+)</td>~", $html, $match);
4

4 に答える 4

5

空白の正確なシーケンス(行の終わりのために難しいか不可能な場合もあります)を再現しようとする代わりに、\s*「任意の数(ゼロを含む)の空白文字」を示すために使用します-これにはスペース、タブ、改行、キャリッジリターンが含まれます...まさにここで必要なもの。

于 2012-08-05T15:24:18.520 に答える
1

申し訳ありませんが、以前はテストしていません。\ s *は0から無限の可能なスペースを与えるので、ここでの解決策です。

preg_match("/<td><strong>Title<\/strong><\/td>\s*<td>([a-zA-Z0-9 -_]+)<\/td>/",
           $html, $match)

それをテストしました。今は動作します:)

于 2012-08-05T15:15:14.390 に答える
0

htmlファイルからデータを取得したい場合は、xmlパーサーの方がはるかに優れている可能性があります。

とにかく、修飾子mを指定しない限り、正規表現は複数の行の何にも一致しません(新しい行に一致するようにドット(。)の修飾子sを指定することもできます)。

http://php.net/manual/en/reference.pcre.pattern.modifiers.phpを参照してください

于 2012-08-05T15:15:46.107 に答える
0

修飾子を使用する

modifiresモディファイアについてもっと読む

preg_match_all('/<td><strong>Title<\/strong><\/td>.*<td>(.*)<\/td>/iUs',$cnt,$preg);
print_r($preg);

出力:

Array
(
    [0] => Array
        (
            [0] => <td><strong>Title</strong></td>

                    <td>Data</td>
        )

    [1] => Array
        (
            [0] => Data
        )

)
于 2014-09-07T19:47:26.427 に答える