ホームページ >バックエンド開発 >PHPチュートリアル >正規表現前後のルックアラウンドの詳細説明チュートリアル
この記事の例では、正規表現チュートリアルの前後の回避策について説明します。参考のために皆さんと共有してください。詳細は次のとおりです。
注: すべての例では、正規表現の一致結果がソース テキストの [and] の間に含まれています。一部の例は Java を使用して実装されます。 Java 自体の正規表現 式の使用法については該当箇所で説明します。すべての Java サンプルは JDK1.6.0_13 でテストされています。
1. 問題の概要
HTML ページで、ページのタグ (
テキスト:
正規表現: 。 *?< ;/ [Tt][Ii][Tt][Ll][Ee]>
結果:
[分析: このパターンは、タイトル タグとその間のテキストを大文字と小文字を区別せずに一致させますが、タイトルのみが必要であるため、完全ではありません。タグ自体ではなく、それらの間のテキストです。この問題を解決するには、ルックアラウンドを使用する必要があります。
2. 前方検索
前方検索では、一致する必要があるが結果として返されないパターンを指定します。前方検索は、実際には ?= で始まり、= の後に照合対象のテキストが続く部分式です。
URL アドレスのプロトコル部分を照合する例を見てください:
テキスト: http://blog.csdn.net/mhmyqn
正規表現: .+(?=:)
結果: [http] ://blog.csdn.net/mhmyqn
分析: URL アドレスのプロトコル部分は: より前の部分で、pattern.+ は任意のテキストに一致し、部分表現 (?=:) は: に一致しますが、次のように一致します。結果には現れない。 ?= を使用して、正規表現エンジンに、: が見つかる限り問題はありませんが、最終的な戻り結果には含まれないことを示します。ここで前方一致 (?=:) を使用せず、(:) を直接使用すると、一致結果は http: になり、これには: が含まれますが、これは私たちが望むものではありません。
注: 前後検索における前後とは、パターンと検索対象のテキストの間の相対的な位置を指します。左が前、右が後ろです。つまり、前方検索は xxx(?=xxx)、後方検索は (?
3. 後方検索
後方検索演算子は ?
たとえば、テキスト ($ で始まり、その後に数字が続く) で価格を検索したい場合、結果には通貨記号は含まれません:
Text: category1:$136.25,category2:$28,category3:$88.60
正規表現: (?
結果: category1:$【136.25】、category2:$【28】、category3:$【88.60】
分析: (?
=$)パターン マッチング$,d+( .d+)? パターンは整数または小数に一致します。結果からわかるように、結果には通貨記号は含まれず、価格のみが含まれます。逆引き検索を使用しないとどうなるでしょうか?パターン $d+(.d+)? を使用すると、結果に $ が含まれます。パターン d+(.d+) を使用すると、category1(23) の数値とも一致しますが、これは望んでいることではありません。
注: 前方検索パターンの長さは可変で、.、*、+ などのメタ文字を含めることができますが、後方検索パターンは固定長のみであり、.、*、+ などを含めることはできません。 。
4. 前方検索と後方検索を組み合わせる
前方検索と後方検索を組み合わせて、前の HTML タグ間のテキストの問題を解決します:
テキスト:
< ;TITLE>私のページへようこそ title>正規表現: (?).*? Ii][Tt][Ll][Ee]>)
結果:
分析: わかります結果から、問題は完全に解決されました。 (?) は、
5. 前方検索と後方検索を無効にする
前述の前方検索と後方検索は通常、テキストの一致に使用されます。その目的は、返される一致結果のテキストの位置を決定することです (一致を指定することによって)。 result 前後にどのようなテキストを含める必要があるか)。この使い方を前方検索、前方検索と呼びます。指定されたパターンに一致しないテキストを検索する、負の前方検索と負の後方検索もあります。
前後を検索するための演算子:
🎜🎜たとえば、テキスト内に価格 ($ で始まり、その後に数字が続きます) と数量があるとします。まず、価格と数量を探します。
テキスト: 私は $30 を支払いました。リンゴ 10 個、オレンジ 15 個、梨 10 個で、$5 節約できました。
正規表現: (?
結果: リンゴ 10 個、オレンジ 15 個、梨 10 個に対して [$30] 支払いました。この注文で [$5] 節約できました。
数量の検索:
テキスト: リンゴ 10 個、オレンジ 15 個、梨 10 個で $30 を支払いました。この注文で $5 節約できました。
正規表現: b(?
結果: この注文で、【10】個のリンゴ、【15】個のオレンジ、【10】個の梨に $30 を支払いました。
分析: (?
6. 概要
前方検索と後方検索を使用すると、最終的な一致結果にどのコンテンツが含まれるかを正確に制御できます。前後の検索操作では、部分式を使用してテキストの一致操作が発生する場所を指定し、一致のみで消費はしないという効果を実現できます。
この記事が皆さんの正規表現の学習に役立つことを願っています。
その他の正規表現チュートリアルや詳細なルックアラウンド関連記事については、PHP 中国語 Web サイトに注目してください。