正式式式を体系的に学習する (1):基本文章

作者: リン・ハーン小さな夢, 作成日: 2017-03-29 10:52:47, 更新日: 2020-11-18 12:39:53

正式式式を体系的に学習する (1):基本文章

正式式式とは何か 正規表現は,特定の文字とそれらの特定の文字の組み合わせによって,文字列をフィルタリングする論理を表す規則文字列を構成する.

  • 正式式表現は,以下の目的を達成します.

    给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);
    可以通过正则表达式,从字符串中获取我们想要的特定部分。
    

    簡単な学習のために,まず Regextor をおすすめします. Regextor は正規式を検証するソフトウェアです.

    img

公式表現のルールについて説明します.

  • 普通のテキスト文字とマッチする

    正式式表現は,通常のテキストのみを含み,そのテキストを正確にマッチすることを代表します.例えば:

    公式表現は:song文字:xiaosongge,xiaoSongge 対応を待っています XIAOのマッチング結果songゲー,シアオ・ソング 正式式表現はデフォルトで大きく書かれるので,songはマッチしない.しかし,ほとんどの正規表現の実装では,大文字を大きく書かない表示のオプションが提供されている.

  • 任意の文字をマッチする

    . は任意の文字にマッチするために使用されます.

    公式表現:c.t カット・セット・カアット・ドッグ 比較結果:cat cetCAAAAT ドッグ 解析:c.t は"c で始まる, で終わる"と,中間は任意の文字の文字列とマッチする.

    同理,多个连续的.可以匹配多个连续的任意字符:

    正式式式:c...t カット・セット・カット・ドッグ カット・セットcaat

  • 特殊文字をマッチする

    .は正規表現において特別な意味を持ち,特別な文字である。\ また特別な文字であり,特別な文字に対する転写作用を作用させる。マッチしたい場合は,本当の".文字である..の前に\を加えることで文字の転写を行う必要がある。したがって,.は本当のを表す. "文字である。

    公式表現:c.t カット c.t ドッグ 匹配結果:catc.t犬 注意: \ は特殊文字であるため,実際の \ 文字をマッチするには 2 つの反斜線\ を使用する必要があります.

    正式式式:c\t カット・c\t・ドッグ 匹配結果:catc\t

  • 文字列を使用する

    上記のように.任意の文字をマッチすることができますが,いくつかの特定の文字をマッチしたい場合はどうですか?特定の文字をマッチするには[と]元文字を使用できます.

    正式式式:c[ab]t カット cbt cet 比較結果:cat cbtチェット 解析:[ab]は"a または b 、したがってc[ab]tは cat cbt をマッチするが, cet をマッチしない".

  • 文字列間隔を使用する

    上記の例では,cet をマッチしたい場合, [] に1つ追加します.任意の小文字をマッチしたい場合,何十個もマッチします.

    正式式式:c[a-z]t 対応中のテキスト:cat cbt czt c2t マッチングの結果:cat cbt cztc2t 解析:c[a-z]tは"cが始まり,tが終わります"と表示され,中間は文字"a" - "z"の任意の文字です.

    似たような区画は:

    [0-9]は[0123456789]と同じ機能である. すべての数字をマッチする. [A-F] AからFまでの文字を大文字にします. [A-Z] AからZまでのすべての文字を上書きします. [a-z] aからzまでのすべての小文字にマッチします. [A-z] は ASCII A から ASCII z のすべての文字をマッチする (すべての文字をマッチするだけでなく,ASCII 表の A から z の文字をマッチする,例えば [ と ^ など). [A-Za-z0-9] すべての上下文字と数字をマッチします.

  • 非文字列のマッチング

    キャラクターセットは,一般的に,マッチしたい文字のセットを指定するために使用されます. しかし,時には,あなたがマッチしたくない文字のセットを排除したい場合もあります. これは文字のセットの否定によって実現できます. 例えば:

    正式式式:c[^a-z]t 対応中のテキスト:cat cbt czt c2t cAt カット cbt cztc2t cAt解析:この例は前例とまったく逆である。[a-z]はすべての小文字に対応する.[^a-z]はすべての小文字以外の文字に対応する。

    ^ は文字列内のすべての文字を解消した文字列である.

  • 元文字

    元文字は正規表現において特別な意味を持ち,上記のいくつかの元文字について述べた.例えば.、[と]、これらの文字は,直接その意味を表すことができず,例えば,直接[をマッチするために]を使用することはできません.

    すべての元文字には,前面に反斜線転記を加えることができる.転記後には,文字が特殊意味ではなく,それ自身にマッチする.例えば,[マッチする" [:"]:

    正式式式:a[b] 対応するテキスト:a[b ab a[[b 比較結果:a[bab a [[b]] 注意: \ は変数元文字を使用するので,\ も元文字であるという意味です.

    正式式式:a\b 対応するテキスト:a\b a\b a[[b a\b と表示される.a\ba[[b

  • 文字の空白

    時には,テキストに印刷できない空白文字をマッチする必要がある場合もあります.例えば,すべてのTab文字,またはすべての交代文字を見つけたい場合もあります.以下の表の特殊元文字を使用できます:

    img

    例えば\r\nは,Windowsでファイルを切り替える回転回転の組み合わせをマッチします.LinuxやUnixでは\nを使えばいいだけです.

  • 特定の文字型にマッチする

    特殊なメタ文字が一般的な文字集合をマッチするために使用できます.これらのメタ文字はマッチ文字クラスと呼ばれる.あなたはそれらを便利に使用することがわかります.

    数字と非数値が一致します. 上記のように,[0-9]はすべての数字にマッチできます.任意の数字をマッチしたくない場合は[^0-9]を使用できます.以下の表には,数字と非数字のクラス元文字がリストされています:

    img

    正式式式:c\dt 対応中のテキスト:cat c2t czt c9t 匹配結果:catc2tcztc9t

    正式式式:c\Dt 対応中のテキスト:cat c2t czt c9t マッチングの結果:catc2tcztc9t アルファベット文字と非アルファベット文字をマッチします また,通常使用されるクラスメーターは\wと\W:

    img

    正式式式:c\wt 対応中のテキスト:cat c2t czt c-t c\t マッチングの結果:cat c2tC-t c\ t

    正式式式:c\Wt 対応中のテキスト:cat c2t c-t c\t 匹配結果:cat c2tc-t c\t空白と非空白をマッチします このマッチングクラスは,次のような空白クラスです.

    img

    正式式式:c\st テキスト:cat c t c2t c\t 匹配結果:catc tc2t c\ t

    正式式式:c\St テキスト:cat c t c2t c\t マッチングの結果:catc tc2t c\t

  • 文字を1つまたは複数の文字とマッチします.

    +元文字は"つまたは複数の文字をマッチすることを示します.例えば,aは"a"をマッチし,a+は"つまたは複数の"a"をマッチします.

    公式表現:cat テキスト:ct cat caat caaat マッチング結果:ctcatカット カット

    正式式式:ca+t テキスト:ct cat caat caaat マッチング結果:ctcat caat caaat文字列で+を使うとき, + を列の外に置く必要があります:

    正式式式:c[0-9]+t マッチングのテキスト:ct c0t cat c123t マッチング結果:ctc0tc123t解析:c[0-9]+tは",cがで始まり,がtで終わります"と表示され,中間は1つまたは複数の数字の文字列です.

    もちろん,[0-9+]も正しい正規表現ですが",0" - "9" と "+" を含む文字の集合を表します.

    一般に,元文字.. と + などが文字集合で使用される時,文字の意味として使用されるので,変換する必要はありません.しかし,変換しても問題ありません.したがって,[0-9+] と[0-9+] の機能は同じです.

    注意:+はメタ文字で",+"をマッチするには+・を表示する必要があります.

  • 0文字以上の文字をマッチします.

    0文字またはそれ以上の文字をマッチしたい場合は, * メタ文字を使用できます.

    正式式式:ca*t テキスト:ct cat caat cbt マッチングの結果:ct cat caatcbt 注意:*記号は元文字である. "*"をマッチするには,変換が必要である.

  • 文字が0か1つと一致します.

    ?は0または1文字をマッチします. だから,?はテキスト内の任意の文字をマッチするのに最適です.

    正式式式:ca?t Ct cat caat cbt 文字のマッチングを待っています 比較結果:ct catCAAT cbt 注意:?記号は元文字である. "? "をマッチするには,変換が必要である.

  • マッチング回数を使用する

    正式式式はマッチする回数を指定することを許す.回数は { } の間を指定することができる. 注: {と} は元文字でもあり,字面的な意味を使うとき変換が必要です.

    正確なマッチ数 マッチする回数を指定するには,{と} の間に数字を入力できます.例えば,{3} は,3回前に現れる文字または集合をマッチします:

    正式式式:ca{3}t Ct cat caaat cbt 文字のマッチングを待っています マッチング結果:ct catcaaatcbt 少なくとも数回 また,マッチする最小値のみを指定することもできます.例えば,{2,} は2回またはそれ以上マッチすることを意味します:

    正式式式:ca{1,}t Ct cat caaat cbt 文字のマッチングを待っています マッチング結果:ctcat caaatcbt 数値区間マッチング また,最小値と最大値を使用してマッチの数を定義することもできます.例えば,{2,3}は最小2回マッチ,最大3回マッチを意味します.

    公式式:ca{2,3}t Ct cat caaat cbt 文字のマッチングを待っています マッチング結果:ct catcaaatcbt この式は,{0,1} と {0,1} の関数と同じです.

  • 貪欲でないマッチング

    この記事へのトラックバック一覧です.

    正式式式:s*g 文字:xiao song xiao song 文字:xiao song 文字:xiao 試合結果:xiao song xiao song 解析:s.*gは,予想通り2つの"song"をマッチするのではなく,最初の"s"と最後の"g"の間のすべてのテキストをマッチした.

    これは*と+が貪欲なマッチングであるからです.つまり正規表現は常に最小のマッチングではなく最大のマッチングを求めます.これは意図的に設計されています.

    しかし,貪欲なマッチを望まない場合は,これらの量詞の非貪欲なマッチ (できるだけ少数の文字をマッチ) を使用してください.

    img

    そうかこの例を修正するには, *? を使用できます.

    正则表达式:s.ゲル 文字:xiao song xiao song 文字:xiao song Xiaoのマッチング結果songシャオsong 分析:可以看到s."g"が2つの"song"と一致します.

  • 文字列の境界を定義する

    文字列の境界にマッチする元文字は^と$で,文字列の始まりと終わりに用いられる.

    ^ フォローしている文字:

    公式表現は ^ xiao

    文字:xiaosong (シアオソング) 比較結果:xiao

    アキアオソング アキアオソングのマッチング結果 解析: ^xiaoは"xiao"から始まる文字列にマッチする.

    $ は,次の方法で使われます:

    公式表現: song$

    文字:xiaosong (シアオソング) XIAOのマッチング結果song

    文字:xiaosonga 文字:xiaosonga 比較結果: シアオソンガ 分析:song$は"song"で終わる文字と一致する.

    共有する:

    正式式式: ^[0-9a-zA-Z]{4,}$

    対応中のテキスト:a1b234ABC 比較結果:a1b234ABC

    +a1b23=4ABC テキストを表示する マッチングの結果: +a1b23=4ABC 解析:^[0-9a-zA-Z]{4,}$は数字や文字で構成され,四桁の文字列よりも大きい文字列である.

    注意:^が集合の先にある場合,否定表示;集合の外にある場合,文字列の先の位置をマッチします. [^0-9] と^[0-9] の違いを試すことができます.

  • マルチラインモードを使用

    しかし,複数行モードは有効である.複数行モードでは,正規表現エンジンは文字列の区切り符として文字列を切り替える. ^ はテキストの始まりまたは一行の始まり,$ はテキストの終わりまたは一行の終わりにマッチする.

    この例を修正します.

    正式式式は: ((?m) ^ [0-9a-zA-Z]{4,}$

    対応中のテキスト:a1b234ABC この2つの要素は, ABC123456

    比較結果:a1b234ABC+a1b23=4ABCABC123456解析: ((?m) ^[0-9a-zA-Z]{4,}$は,各行に数字や文字で構成され,四桁の文字列よりも大きい文字列をマッチします.

    注意:複数行式を使用する場合は,正規式の先頭に ((?m) を置く必要があります. (?m) は,ほとんどの正規表現実装ではサポートされていません. いくつかの正規表現実装では,\Aが文字列の始まりと\Zが文字列の終わりに一致することをサポートしています. サポートされている場合,これらの元文字は^、$と同じ機能を持っています. しかし,これらの元文字は,\?mの修飾を使用することはできません.

基礎について説明します. 規則式を体系的に学ぶための次の記事を見てください. (2): 進んだ記事.

フォローしているユーザー:J.A.R.


もっと