正規表現教程の前後にlookaroundを検索して詳しく説明します。
本論文の例は、正規表現教程の前後にlookaroundを検索することを述べている。皆さんに参考にしてあげます。具体的には以下の通りです。
注:すべての例で正則表現のマッチング結果はソーステキストの「和」の間に含まれています。Java自体の正則表現の使い方であれば、該当する箇所で説明します。javaの例は全部JDK 1.6.0_にあります。13でテストに合格します。
一、問題の導入
HTMLページでは、ページのラベル、すなわち「title」と「/title」との間のテキストがマッチするようにラベルペアのテキストがマッチします。
テキスト:welcome to my page
正規表現:<[Tt][Ii][Tt][Ll][Ee]]].*?Tt][Ii][Tt][Ll][Ee]
結果:<welcome to my page> >
解析:<[Tt][Ii][Ll][Ee]は、大文字と小文字を区別しないことを示しています。このモードはティタールラベルとそれらのテキストにマッチしていますが、完璧ではありません。ラベル自体を含まないで、ティタールラベル間のテキストだけがほしいからです。この問題を解決するには前後の検索が必要です。
二、前向きに検索する
前方検索は、結果にマッチする必要があるが、返さないパターンを指定します。前の検索は実はサブ表現です。最初に、マッチするテキストが=の後に続く必要があります。
一つのURLアドレスに一致するプロトコル部分の例を見てください。
テキスト:http://blog.csdn.net/mhmyqn
正規表現:.+(?=:)
結果:【http】://blog.csdn.net/mhmyqn
解析:URLアドレスのプロトコル部分は、前の部分、モード.+任意のテキストにマッチし、サブ表現(?=)マッチ:しかし、マッチされました。結果には現れませんでした。私たちが使う正規表現エンジンには、見つけられたらいいですが、最終的な戻り結果には含まれていません。ここで前のマッチを使わないと(?=)、直接使うのではなく、マッチング結果はhttp:で、それは含まれています。
注意:前と後は、検索されたテキストの相対的な位置を意味します。左は前、右は後となります。前に向かって検索します。xxx(?=xxx)は、後に検索します。xxx)xxxは、後から調べて、次に紹介します。
三、後方検索
オペレータを後方に検索すると?<=>です。しかし、すべての正規表現が後方検索に対応しているわけではなく、JavaScriptはサポートされていません。java言語は後方検索に対応しています。
たとえばテキストの中の価格を検索します。通貨記号は含まれていません。
テキスト:category 1:136.25、category 2:28、category 3:88.60
正規表現:(?=\$)\d+(\.\d+)
結果:category 1:$【136.25】category 2:$【28】category 3:$
解析:(?<=\$)パターンマッチング$パターンマッチング整数または小数。結果から分かるように、通貨記号は含まれておらず、価格だけがマッチしています。後方検索を使わないと、状況はどうなりますか?モード(\.\d+)?これは結果に$を含めます。モード\d+(\.\d+)?また、categery 1(23)の数字も合わせられます。私たちが欲しいのではありません。
注意:前方検索モードの長さは可変で、これらは.、*、+などの要素文字を含むことができます。後方検索モードは固定長さのみで、.、*、+などの要素文字は含まれません。
四、前に探して後ろに探して結合します。
前の検索と後ろの検索を組み合わせて使うと、前のHTMLタグ間のテキストの問題を解決できます。
テキスト:welcome to my page
正規表現:(?=<[[Tt][Ii][Tt][Ll][Ee].*?(?=結果:【welcome to my page】
解析:結果から見ると、問題は完璧に解決されたということが分かります。Tt][Ii][Tt][Ll][Ee]]は、後方操作であり、それにマッチしていますが、それは消費されません。Tt][Ii][Tt][Ll][Ee]]は、前の動作にマッチしていますが、それは消費されません。最終的に返したマッチの結果はラベル間のテキストのみです。
五、前後を調べて非を取る
前に述べた前方検索と後方検索は、通常はテキストと一致するために用いられており、その目的は、返されるマッチ結果のテキストの位置を決定するためである(マッチング結果の前後にどのテキストが必要かを指定することによって)。このような使い方は正前方検索と正後方検索という。もう一つの負の前方検索と負の後方検索は、与えられたパターンに一致しないテキストを検索することです。
前後の検索操作:
(?=)
前へ探しています
(?!)
負の前方検索
(?<=)
後方参照
(?<!)
負後方検索
たとえば、テキストの中に価格(米ドルで始まると、後から数字)と数量があります。価格と数量を探したいです。まず、価格を調べてみます。
テキスト:I paid$30 for 10 apple,15 oranges,and 10 pears.I saved$5 onthis order.
正規表現:(?=\$)\d+
結果:I paid($30)for 10 apple,15 oranges,and 10 pears.I saved($5)on thisorder.
検索数:
テキスト:I paid$30 for 10 apple,15 oranges,and 10 pears.I saved$5 onthis order.
正規表現:\b(?\!\)d+\b
結果:I paid$30 for【10】apple,【15】oranges,and【10】pears.I saved$5 on this order.
解析:(?<!\$)負の後方検索を表します。結果は$で始まる値だけを含んでいます。
六、まとめ
前後の検索があれば、最終的なマッチング結果にはどのような内容が含まれているかを正確にコントロールできます。前後の検索操作により、テキストマッチング動作が発生した位置をサブ表現で指定でき、不消費にマッチするだけの効果が得られます。
PS:ここでもう2つの非常に便利な正規表現ツールを提供します。
JavaScript正規表現はオンラインテストツールです。
http://tools.jb51.net/regex/javascript
正規表現のオンライン作成ツール:
http://tools.jb51.net/regex/create_reg
本論文で述べたように、皆さんの正規表現学習に役に立ちます。
注:すべての例で正則表現のマッチング結果はソーステキストの「和」の間に含まれています。Java自体の正則表現の使い方であれば、該当する箇所で説明します。javaの例は全部JDK 1.6.0_にあります。13でテストに合格します。
一、問題の導入
HTMLページでは、ページのラベル、すなわち「title」と「/title」との間のテキストがマッチするようにラベルペアのテキストがマッチします。
テキスト:
正規表現:<[Tt][Ii][Tt][Ll][Ee]]].*?Tt][Ii][Tt][Ll][Ee]
結果:<
解析:<[Tt][Ii][Ll][Ee]は、大文字と小文字を区別しないことを示しています。このモードはティタールラベルとそれらのテキストにマッチしていますが、完璧ではありません。ラベル自体を含まないで、ティタールラベル間のテキストだけがほしいからです。この問題を解決するには前後の検索が必要です。
二、前向きに検索する
前方検索は、結果にマッチする必要があるが、返さないパターンを指定します。前の検索は実はサブ表現です。最初に、マッチするテキストが=の後に続く必要があります。
一つのURLアドレスに一致するプロトコル部分の例を見てください。
テキスト:http://blog.csdn.net/mhmyqn
正規表現:.+(?=:)
結果:【http】://blog.csdn.net/mhmyqn
解析:URLアドレスのプロトコル部分は、前の部分、モード.+任意のテキストにマッチし、サブ表現(?=)マッチ:しかし、マッチされました。結果には現れませんでした。私たちが使う正規表現エンジンには、見つけられたらいいですが、最終的な戻り結果には含まれていません。ここで前のマッチを使わないと(?=)、直接使うのではなく、マッチング結果はhttp:で、それは含まれています。
注意:前と後は、検索されたテキストの相対的な位置を意味します。左は前、右は後となります。前に向かって検索します。xxx(?=xxx)は、後に検索します。xxx)xxxは、後から調べて、次に紹介します。
三、後方検索
オペレータを後方に検索すると?<=>です。しかし、すべての正規表現が後方検索に対応しているわけではなく、JavaScriptはサポートされていません。java言語は後方検索に対応しています。
たとえばテキストの中の価格を検索します。通貨記号は含まれていません。
テキスト:category 1:136.25、category 2:28、category 3:88.60
正規表現:(?=\$)\d+(\.\d+)
結果:category 1:$【136.25】category 2:$【28】category 3:$
解析:(?<=\$)パターンマッチング$パターンマッチング整数または小数。結果から分かるように、通貨記号は含まれておらず、価格だけがマッチしています。後方検索を使わないと、状況はどうなりますか?モード(\.\d+)?これは結果に$を含めます。モード\d+(\.\d+)?また、categery 1(23)の数字も合わせられます。私たちが欲しいのではありません。
注意:前方検索モードの長さは可変で、これらは.、*、+などの要素文字を含むことができます。後方検索モードは固定長さのみで、.、*、+などの要素文字は含まれません。
四、前に探して後ろに探して結合します。
前の検索と後ろの検索を組み合わせて使うと、前のHTMLタグ間のテキストの問題を解決できます。
テキスト:
正規表現:(?=<[[Tt][Ii][Tt][Ll][Ee].*?(?=結果:
解析:結果から見ると、問題は完璧に解決されたということが分かります。Tt][Ii][Tt][Ll][Ee]]は、後方操作であり、それにマッチしていますが、それは消費されません。Tt][Ii][Tt][Ll][Ee]]は、前の動作にマッチしていますが、それは消費されません。最終的に返したマッチの結果はラベル間のテキストのみです。
五、前後を調べて非を取る
前に述べた前方検索と後方検索は、通常はテキストと一致するために用いられており、その目的は、返されるマッチ結果のテキストの位置を決定するためである(マッチング結果の前後にどのテキストが必要かを指定することによって)。このような使い方は正前方検索と正後方検索という。もう一つの負の前方検索と負の後方検索は、与えられたパターンに一致しないテキストを検索することです。
前後の検索操作:
(?=)
前へ探しています
(?!)
負の前方検索
(?<=)
後方参照
(?<!)
負後方検索
たとえば、テキストの中に価格(米ドルで始まると、後から数字)と数量があります。価格と数量を探したいです。まず、価格を調べてみます。
テキスト:I paid$30 for 10 apple,15 oranges,and 10 pears.I saved$5 onthis order.
正規表現:(?=\$)\d+
結果:I paid($30)for 10 apple,15 oranges,and 10 pears.I saved($5)on thisorder.
検索数:
テキスト:I paid$30 for 10 apple,15 oranges,and 10 pears.I saved$5 onthis order.
正規表現:\b(?\!\)d+\b
結果:I paid$30 for【10】apple,【15】oranges,and【10】pears.I saved$5 on this order.
解析:(?<!\$)負の後方検索を表します。結果は$で始まる値だけを含んでいます。
六、まとめ
前後の検索があれば、最終的なマッチング結果にはどのような内容が含まれているかを正確にコントロールできます。前後の検索操作により、テキストマッチング動作が発生した位置をサブ表現で指定でき、不消費にマッチするだけの効果が得られます。
PS:ここでもう2つの非常に便利な正規表現ツールを提供します。
JavaScript正規表現はオンラインテストツールです。
http://tools.jb51.net/regex/javascript
正規表現のオンライン作成ツール:
http://tools.jb51.net/regex/create_reg
本論文で述べたように、皆さんの正規表現学習に役に立ちます。