最短一致を使用する必要があります: テキストがある場合は、最長ではなく、可能な限り最短のみを一致させたいと考えます。以下の記事では、正規表現における最短一致パターンの使い方について詳しく紹介していますので、ぜひ参考にしてみてください。
前書き
最近、正規表現を使用してWebページから何かを取得したいと考えました。内容は複雑ではありませんでしたが、多くの問題が発生しました。以下で言うことはあまりありませんが、詳細な紹介を見てみましょう:
4a249f0d628e2318394fd9b75b4636b1hello world473f0a7621bec819994bb5020d29372a
の h1 の開始タグと終了タグを一致させるなど、タグの先頭と末尾を一致させるために正規表現を使用する場合、多くの人は次のように書くかもしれません。こんな感じ
/<.*h1>/g
でも本当にこれでいいの?
* 一致する文字は前の文字の 0 個以上と一致し、貪欲一致であるため
、次の結果が得られます。
明らかにこれは私たちが望んでいることではないので、貪欲なマッチングを最小限のマッチングに変更するにはどうすればよいでしょうか?
/<.*?h1>/g
以下に示すように、上記の記述で十分です:
実際の原理? も貪欲一致であり、0 から 1 までのみ一致するため、非常に単純である必要があります (
)。そのため、最初の一致に一致すると終了し、* が複数の貪欲一致に一致することを防ぎます。
以上が正規表現内の最短一致パターンの解析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。