4

たくさんのコンテンツを含む大きなHTMLファイルがあります。'a'たとえば、ファイル全体から名前が付けられたJavaScript変数を取得したいと思います。

例:(実際のコンテンツの多くを削除しました)

<html>
    <head>
        <script>
            var a = [{'a': 1, 'b': 2}];
        </script>
    </head>
    <body>
        ....
    </body>
</html>

上記から何が来る必要があります:

[{'a': 1, 'b': 2}]
4

1 に答える 1

11
preg_match('#var a = (.*?);\s*$#m', $html, $matches);
echo $matches[1];

説明:

  • 正規表現は、を含むすべての行に一致しようとしますvar a =
  • ;次に、任意の数のスペース\s*、そして行の終わりまで、すべてが一致します$
  • 修飾子はm各行を個別に一致させようとし$ますが、それがないと、文字列の最後に一致するだけで、少し役に立たなくなります。

任意の量のスペースは、定義の後にスペースがある場合にのみ存在し、他の理由(人為的エラーなど)はありません。それが起こらないと確信している場合は、を削除できます\s*

これは本格的なパーサーに置き換わるものではないことに注意してください。aが複数行で定義されている場合、a複数回定義されている場合(スコープについて考えてみてくださいvar a。グローバルスコープで、次にvar a関数内で使用できます)など、変更を加える必要があります。

于 2012-07-07T21:17:58.073 に答える