Javaラーニングノート-正規表現

10306 ワード

一定の規則に合致して、文字列に対して操作する1種の表現式は他の言語の中で、\\は表します:私は正規表現の中で1つの普通の(字面の上の)反スラッシュを挿入したいと思って、それにいかなる特殊な意味をJavaの中であげないでください、\\は表します:私は1つの正規表現の反スラッシュを挿入して、その後の文字には特別な意味があります
正規表現はJavaでよく使われる3つの使い方があります
  • マッチング:String matches(regex)メソッド.文字列全体をルールでマッチングし、ルールに合致しない箇所がある限りマッチングを終了し、false
  • を返します.
    String telReg = "1\\d{10}"; //     
    boolean b = "13812345678".matches(telReg);
    String reg = "[a-zA-Z]\\d*"; //           
    String reg = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+"; //    
    String reg = "\\w+@\\w+(\\.\\w+)+"; //    
    
  • カット:String split(regex);
  • String[] arr = "a.b.c.d".split("\\."); //     
    String[] arr = "c:\\test\\a.txt".split("\\\\"); //       
    String[] arr = "erkktyqqquizzzzzo".split("(.)\\1+"); //       
    
  • 置換:String replaceAll(regex, str);regexに定義されたグループがある場合、第2のパラメータで$記号で正規表現の既存のグループ
  • を取得できます.
    String str = "qq123456w14op25675f".replaceAll("\\d{5,}","#"); //     5         
    String str = "addbgggckkkd".replaceAll("(.)\\1+","#"); //            
    String str = "erkktyqqquizzzzzo".replaceAll("(.)\\1+","$1"); //              
    
  • 取得:文字列内の規則に合致するサブストリングを取り出す
  • 正規表現をオブジェクトにカプセル化
  • 正規オブジェクトと操作する文字列を関連付ける
  • 関連付け後、正規マッチングエンジン
  • を取得する
  • ルールに合致するサブストリングをエンジンで操作し、例えば
  • を取り出す
    //        
    Pattern p = Pattern.compile(reg);
    //                。       。
    Matcher m  = p.matcher(str);
    while(m.find()) {
        System.out.println(m.group());
    }
    
  • この文字が正しいかどうかだけ知りたい場合は、一致
  • を使用します.
  • 既存の文字列を別の文字列にしたい場合は、
  • を置き換えます.
  • 文字列を複数の文字列にカスタマイズしたい.カット.取得ルール以外のサブストリング
  • 需要に合った文字列のサブストリングを取得したい場合は、取得します.ルールに一致するサブストリングを取得
  • 文字:
    こうぞう
    マッチ
    `x`
    文字x
    `\\`
    バックスラッシュ文字
    `\0n`
    8進数値0の文字n(0<=n<=7)
    `\0nn`
    8進数値0の文字nn(0<=n<=7)
    `\0mnn`
    8進数値0の文字mnn(0<=m<=3、0<=n<=7)
    `\xhh`
    16進数値0 xの文字hh
    `\uhhhh`
    16進数値0 xの文字hhh
    `\t`
    タブ(`'''09')
    ``
    新しい行(改行)記号(`'''A')
    `\r`
    リターン記号(`'''D')
    `\f`
    改ページ(`'''C')
    `\a`
    アラーム(bell)記号(`'<07')
    `\e`
    エスケープ記号(`'1 B')
    `\cx`
    xに対応する制御子
    文字クラス:
    こうぞう
    マッチ
    `[abc]`
    a、bまたはc(単純クラス)
    `[^abc]`
    a、bまたはc(否定)を除く任意の文字
    `[a-zA-Z]`
    aからzまたはAからZ、両頭のアルファベットを含む(範囲)
    `[a-d[m-p]]`
    aからdまたはmからp:`[a-dm-p]`(並列)
    `[a-z&&[def]]`
    d、eまたはf(交差)
    `[a-z&&[^bc]]`
    aからzまで、bとc:`[ad-z]`(減算)を除く
    `[a-z&&[^m-p]]`
    mからp:`[a-lq-z]`(減算)ではなくaからz
    事前定義文字クラス:
    こうぞう
    マッチ
    `.`
    任意の文字(行の終端と一致するか一致しないか)
    `\d`
    数字:`[0-9]`
    `\D`
    非数字:`[^0-9]`
    `\s`
    空白文字:`[tx 0 Bfr]`
    `\S`
    空白以外の文字:`[^s]`
    `\w`
    単語文字:`[a-zA-Z_0-9]`
    `\W`
    非単語文字:`[^w]`
    POSIX文字類(US-ACSCIIのみ):
    こうぞう
    マッチ
    `\p{Lower}`
    小文字文字:`[a-z]`
    `\p{Upper}`
    大文字文字:`[A-Z]`
    `\p{ASCII}`
    すべてのASCII:`[x 00-x 7 F]`
    `\p{Alpha}`
    アルファベット文字:`[p{Lower}p{Upper}`
    `\p{Digit}`
    10進数:`[0-9]`
    `\p{Alnum}`
    アルファベット文字:`[p{Alpha}p{Digit}`
    `\p{Punct}`
    句読点:`!"#$%&'()*+,-./:;<=>?@[\]^_{|}~`
    `\p{Graph}`
    可視文字:`[p{Alnum}p{Punct}`
    `\p{Print}`
    印刷可能文字:`[p{Graph}x 20]`
    `\p{Blank}`
    スペースまたはタブ:`[t]`
    `\p{Cntrl}`
    制御文字:`[x 00-x 1 Fx 7 F]`
    `\p{XDigit}`
    16進数:`[0-9 a-fA-F]`
    `\p{Space}`
    空白文字:`[tx 0 Bfr]`
    JAva.lang.Characterクラス(簡単なjava文字タイプ):
    こうぞう
    マッチ
    `\p{javaLowerCase}`
    `java.lang.Character.isLowerCase()`に等しい
    `\p{javaUpperCase}`
    `java.lang.Character.isUpperCase()`に等しい
    `\p{javaWhitespace}`
    `java.lang.Character.isWhitespace()`に等しい
    `\p{javaMirrored}`
    `java.lang.Character.isMirrored()`に等しい
    Unicodeブロックとカテゴリのクラス:
    こうぞう
    マッチ
    `\p{InGreek}`
    Greekブロックの文字
    `\p{Lu}`
    大文字(単純カテゴリ)
    `\p{Sc}`
    通貨記号
    `\P{InGreek}`
    すべての文字、Greekブロックから除外(否定)
    `[\p{L}&&[^\p{Lu}]]`
    すべてのアルファベット、大文字を除く(減算)
    境界一致器:
    こうぞう
    マッチ
    `^`
    行の先頭
    `$`
    行の末尾
    `\b`
    単語の境界
    `\B`
    非単語境界
    `\A`
    入力の先頭
    `\G`
    最後の一致
    `\Z`
    入力された末尾は、最後の終了文字にのみ使用されます(もしあれば)
    `\z`
    入力の末尾
    Greedy数量詞:
    こうぞう
    マッチ
    `X?`
    X、一度も一度も
    `X*`
    X,0回または複数回
    `X+`
    X,1回または複数回
    `X{n}`
    X,ちょうどn回
    `X{n,}`
    X,少なくともn回
    `X{n,m}`
    X,少なくともn回であるが,m回を超えない
    Reluctant数量語:
    こうぞう
    マッチ
    `X??`
    X、一度も一度も
    `X*?`
    X,0回または複数回
    `X+?`
    X,1回または複数回
    `X{n}?`
    X,ちょうどn回
    `X{n,}?`
    X,少なくともn回
    `X{n,m}?`
    X,少なくともn回であるが,m回を超えない
    Possessive数量語:
    こうぞう
    マッチ
    `X?+`
    X、一度も一度も
    `X*+`
    X,0回または複数回
    `X++`
    X,1回または複数回
    `X{n}+`
    X,ちょうどn回
    `X{n,}+`
    X,少なくともn回
    `X{n,m}+`
    X,少なくともn回であるが,m回を超えない
    Logical演算子:
    こうぞう
    マッチ
    `XY`
    XかかとY
    `X|Y`
    XまたはY
    `(X)`
    X、キャプチャグループとして
    Backリファレンス:
    こうぞう
    マッチ
    ``
    一致するnthキャプチャグループ
    参照:
    こうぞう
    マッチ
    `\`
    いいえ、次の文字を参照してください.
    `\Q`
    しかし、`E`まですべての文字を引用します.
    `\E`
    いいえ、`Q`からの引用は終わります.
    特殊構造(非キャプチャ):
    こうぞう
    マッチ
    `(?:X)`
    X、非捕獲グループとして
    `(?idmsux-idmsux)`
    ただし、フラグi d m s u x on-offに一致します.
    `(?idmsux-idmsux:X)`
    Xは、所与のフラグi d m s u x on-offを有する
    `(?=X)`
    X,ゼロ幅の正lookaheadを通過
    `(?!X)`
    X,ゼロ幅の負lookaheadを通過
    `(?<=X)`
    X,ゼロ幅の正lookbehindを通過
    `(?
    X,ゼロ幅の負lookbehindを通過
    `(?>X)`
    Xは、独立した非捕獲グループとして