Java正規表現-クイックガイド

Javaは、正規表現とのパターンマッチング用のjava.util.regexパッケージを提供します。Javaの正規表現は、Perlプログラミング言語と非常によく似ており、習得が非常に簡単です。

正規表現は、パターンに保持された特殊な構文を使用して、他の文字列または文字列のセットを照合または検索するのに役立つ特殊な文字シーケンスです。これらは、テキストやデータの検索、編集、または操作に使用できます。

java.util.regexパッケージは、主に次の3つのクラスで構成されています-

  • Pattern Class−パターンオブジェクトは、正規表現をコンパイルした表現です。Patternクラスは、パブリックコンストラクターを提供しません。パターンを作成するには、最初にそのパブリックスタティックの1つを呼び出す必要がありますcompile()その後、Patternオブジェクトを返すメソッド。これらのメソッドは、最初の引数として正規表現を受け入れます。

  • Matcher Class− Matcherオブジェクトは、パターンを解釈し、入力文字列に対して一致操作を実行するエンジンです。Patternクラスと同様に、Matcherはパブリックコンストラクターを定義しません。を呼び出すことにより、Matcherオブジェクトを取得しますmatcher() Patternオブジェクトのメソッド。

  • PatternSyntaxException − PatternSyntaxExceptionオブジェクトは、正規表現パターンの構文エラーを示すチェックされていない例外です。

グループのキャプチャは、複数の文字を1つのユニットとして扱う方法です。これらは、グループ化する文字を括弧のセット内に配置することによって作成されます。たとえば、正規表現(dog)は、文字「d」、「o」、および「g」を含む単一のグループを作成します。

キャプチャグループは、左から右に開いた括弧を数えることによって番号が付けられます。たとえば、式((A)(B(C)))には、このようなグループが4つあります。

  • ((A)(B(C)))
  • (A)
  • (B(C))
  • (C)

式に存在するグループの数を確認するには、マッチャーオブジェクトでgroupCountメソッドを呼び出します。groupCountメソッドはint マッチャーのパターンに存在するキャプチャグループの数を示します。

常に式全体を表す特別なグループ、グループ0もあります。このグループは、groupCountによって報告される合計には含まれません。

次の例は、指定された英数字の文字列から数字列を見つける方法を示しています。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches {
   public static void main( String args[] ) {
      // String to be scanned to find the pattern.
      String line = "This order was placed for QT3000! OK?";
      String pattern = "(.*)(\\d+)(.*)";

      // Create a Pattern object
      Pattern r = Pattern.compile(pattern);

      // Now create matcher object.
      Matcher m = r.matcher(line);
      
      if (m.find( )) {
         System.out.println("Found value: " + m.group(0) );
         System.out.println("Found value: " + m.group(1) );
         System.out.println("Found value: " + m.group(2) );
      } else {
         System.out.println("NO MATCH");
      }
   }
}

これにより、次の結果が生成されます-

出力

Found value: This order was placed for QT3000! OK?
Found value: This order was placed for QT300
Found value: 0

前書き

ザ・ java.util.regex.MatchResultインターフェイスは、一致操作の結果を表します。このインターフェイスには、正規表現との一致の結果を判別するために使用されるクエリメソッドが含まれています。一致境界、グループ、およびグループ境界は表示できますが、MatchResultを介して変更することはできません。

インターフェイス宣言

以下はの宣言です java.util.regex.MatchResult インターフェイス-

public interface MatchResult

インターフェイスメソッド

シニア番号 方法と説明
1 int end()

最後に一致した文字の後のオフセットを返します。

2 int end(int group)

この一致中に指定されたグループによってキャプチャされたサブシーケンスの最後の文字の後のオフセットを返します。

3 文字列group()

前の一致と一致した入力サブシーケンスを返します。

4 文字列グループ(intグループ)

前の一致操作中に指定されたグループによってキャプチャされた入力サブシーケンスを返します。

5 int groupCount()

この一致結果のパターンのキャプチャグループの数を返します。

6 int start()

一致の開始インデックスを返します。

7 int start(int group)

この一致中に指定されたグループによってキャプチャされたサブシーケンスの開始インデックスを返します。

前書き

ザ・ java.util.regex.Pattern クラスは、正規表現のコンパイル済み表現を表します。

クラス宣言

以下はの宣言です java.util.regex.Pattern クラス-

public final class Pattern
   extends Object
      implements Serializable

フィールド

以下はのフィールドです java.util.regex.Duration クラス-

  • static int CANON_EQ −正規の同等性を有効にします。

  • static int CASE_INSENSITIVE −大文字と小文字を区別しないマッチングを有効にします。

  • static int COMMENTS −パターンで空白とコメントを許可します。

  • static int DOTALL −dotallモードを有効にします。

  • static int LITERAL −パターンのリテラル解析を有効にします。

  • static int MULTILINE −マルチラインモードを有効にします。

  • static int UNICODE_CASE −Unicode対応のケースフォールディングを有効にします。

  • static int UNICODE_CHARACTER_CLASS −事前定義された文字クラスとPOSIX文字クラスのUnicodeバージョンを有効にします。

  • static int UNIX_LINES −Unix回線モードを有効にします。

クラスメソッド

シニア番号 方法と説明
1 静的パターンコンパイル(文字列正規表現)

指定された正規表現をパターンにコンパイルします。

2 静的パターンコンパイル(文字列正規表現、intフラグ)

指定された正規表現を、指定されたフラグを持つパターンにコンパイルします。

3 int flags()

このパターンの一致フラグを返します。

4 マッチャーマッチャー(CharSequence入力)

指定された入力をこのパターンと照合するマッチャーを作成します。

5 静的ブール一致(文字列正規表現、CharSequence入力)

指定された正規表現をコンパイルし、指定された入力をそれに一致させようとします。

6 文字列pattern()

このパターンのコンパイル元の正規表現を返します。

7 static String quote(String s)

指定された文字列のリテラルパターン文字列を返します。

8 String [] split(CharSequence input)

このパターンの一致を中心に、指定された入力シーケンスを分割します。

9 String [] split(CharSequence input、int limit)

このパターンの一致を中心に、指定された入力シーケンスを分割します。

10 文字列toString()

このパターンの文字列表現を返します。

継承されたメソッド

このクラスは、次のクラスからメソッドを継承します-

  • Java.lang.Object

前書き

ザ・ java.util.regex.Matcher クラスは、パターンを解釈することにより、文字シーケンスに対して一致操作を実行するエンジンとして機能します。

クラス宣言

以下はの宣言です java.util.regex.Matcher クラス-

public final class Matcher
   extends Object
      implements MatchResult

クラスメソッド

シニア番号 方法と説明
1 マッチャーappendReplacement(StringBuffer sb、文字列置換)

非終端記号の追加と置換のステップを実装します。

2 StringBuffer appendTail(StringBuffer sb)

端末の追加と置換のステップを実装します。

3 int end()

最後に一致した文字の後のオフセットを返します。

4 int end(int group)

前の一致操作中に指定されたグループによってキャプチャされたサブシーケンスの最後の文字の後のオフセットを返します。

5 ブール値find()

パターンに一致する入力シーケンスの次のサブシーケンスを見つけようとします。

6 boolean find(int start)

このマッチャーをリセットしてから、指定されたインデックスから開始して、パターンに一致する入力シーケンスの次のサブシーケンスを見つけようとします。

7 文字列group()

前の一致操作中に指定されたグループによってキャプチャされた入力サブシーケンスを返します。

8 文字列グループ(文字列名)

前の一致操作中に指定された名前付きキャプチャグループによってキャプチャされた入力サブシーケンスを返します。

9 int groupCount()

このマッチャーのパターンのキャプチャグループの数を返します。

10 ブール値hasAnchoringBounds()

このマッチャーの領域境界のアンカーを照会します。

11 ブール値hasTransparentBounds()

このマッチャーの領域境界の透明度を照会します。

12 ブールhitEnd()

このマッチャーによって実行された最後の一致操作で検索エンジンが入力の終わりに到達した場合、trueを返します。

13 ブール値lookingAt()

領域の先頭から始まる入力シーケンスをパターンと照合しようとします。

14 ブール値matches()

領域全体をパターンと照合しようとします。

15 パターンpattern()

このマッチャーによって解釈されるパターンを返します。

16 静的文字列quoteReplacement(String s)

指定された文字列のリテラル置換文字列を返します。

17 マッチャー領域(int start、int end)

このマッチャーの領域の制限を設定します。

18 int regionEnd()

このマッチャーのリージョンの終了インデックス(排他的)を報告します。

19 int regionStart()

このマッチャーのリージョンの開始インデックスを報告します。

20 文字列replaceAll(文字列置換)

パターンに一致する入力シーケンスのすべてのサブシーケンスを、指定された置換文字列に置き換えます。

21 文字列replaceFirst(文字列置換)

パターンに一致する入力シーケンスの最初のサブシーケンスを、指定された置換文字列に置き換えます。

22 ブールrequireEnd()

より多くの入力が正の一致を負の一致に変更する可能性がある場合、trueを返します。

23 マッチャーreset()

このマッチャーをリセットします。

24 マッチャーリセット(CharSequence入力)

このマッチャーを新しい入力シーケンスでリセットします。

25 int start()

前の一致の開始インデックスを返します。

26 int start(int group)

前の一致操作中に指定されたグループによってキャプチャされたサブシーケンスの開始インデックスを返します。

27 MatchResult toMatchResult()

このマッチャーの一致状態をMatchResultとして返します。

28 文字列toString()

このマッチャーの文字列表現を返します。

29 マッチャーuseAnchoringBounds(boolean b)

このマッチャーの領域境界のアンカーを設定します。

30 マッチャーusePattern(パターンnewPattern)

このマッチャーが一致を見つけるために使用するパターンを変更します。

31 マッチャーuseTransparentBounds(boolean b)

このマッチャーの領域境界の透明度を設定します。

継承されたメソッド

このクラスは、次のクラスからメソッドを継承します-

  • Java.lang.Object

前書き

ザ・ java.util.regex.PatternSyntaxException classは、正規表現パターンの構文エラーを示すためにスローされるチェックされていない例外を表します。

クラス宣言

以下はの宣言です java.util.regex.PatternSyntaxException クラス-

public class PatternSyntaxException
   extends IllegalArgumentException

コンストラクター

シニア番号 方法と説明
1 PatternSyntaxException(String desc, String regex, int index)

このクラスの新しいインスタンスを構築します。

クラスメソッド

シニア番号 方法と説明
1 String getDescription()

エラーの説明を取得します。

2 int getIndex()

エラーインデックスを取得します。

3 String getMessage()

構文エラーとそのインデックスの説明、誤った正規表現パターン、およびパターン内のエラーインデックスの視覚的表示を含む複数行の文字列を返します。

4 String getPattern()

誤った正規表現パターンを取得します。

継承されたメソッド

このクラスは、次のクラスからメソッドを継承します-

  • Java.lang.Throwable
  • Java.lang.Object

次の例は、java.util.regex.Pattern.PatternSyntaxExceptionクラスメソッドの使用法を示しています。

package com.tutorialspoint;

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

public class PatternSyntaxExceptionDemo {
   private static String REGEX = "[";
   private static String INPUT = "The dog says meow " + "All dogs say meow.";
   private static String REPLACE = "cat";

   public static void main(String[] args) {
      try{
         Pattern pattern = Pattern.compile(REGEX);
         
         // get a matcher object
         Matcher matcher = pattern.matcher(INPUT); 
         INPUT = matcher.replaceAll(REPLACE);
      } catch(PatternSyntaxException e){
         System.out.println("PatternSyntaxException: ");
         System.out.println("Description: "+ e.getDescription());
         System.out.println("Index: "+ e.getIndex());
         System.out.println("Message: "+ e.getMessage());
         System.out.println("Pattern: "+ e.getPattern());
      }
   }
}

上記のプログラムをコンパイルして実行すると、次の結果が得られます-

PatternSyntaxException: 
Description: Unclosed character class
Index: 0
Message: Unclosed character class near index 0
[
^
Pattern: [

以下は、Javaで正規表現を使用して文字を照合するさまざまな例です。

シニア番号 構築と一致
1 バツ

文字x

2 \\

バックスラッシュ文字

3 \ 0n

8進値が0nの文字(0≤n≤7)

4 \ 0nn

8進値が0nnの文字(0≤n≤7)

5 \ 0mnn

8進値が0mnnの文字(0≤m≤3、0≤n≤7)

6 \ xhh

16進値が0xhhの文字

7 \ uhhhh

16進値が0xhhhhの文字

8 \ t

タブ文字( '\ u0009')

9 \ n

改行(改行)文字( '\ u000A')

10 \ r

キャリッジリターン文字( '\ u000D')

11 \ f

改ページ文字( '\ u000C')

以下は、Javaで正規表現を使用して文字クラスを照合するさまざまな例です。

シニア番号 構築と一致
1 [abc]

a、b、またはc(単純なクラス)。

2 [^ abc]

a、b、またはc(否定)以外のすべての文字。

3 [a-zA-Z]

aからzまたはAからZまで(範囲)。

4 [ad [mp]]

aからd、またはmからp:[a-dm-p](和集合)。

5 [az && [def]]

d、e、またはf(交差点)。

6 [az && [^ bc]]

bとcを除くaからz:[ad-z](減算)

7 [az && [^ mp]]

mからpではなくaからz:[a-lq-z](減算)。

以下は、Javaの正規表現を使用して事前定義された文字クラスを照合するさまざまな例です。

シニア番号 構築と一致
1

任意の文字(行末記号と一致する場合と一致しない場合があります)。

2 \ d

数字:[0-9]。

3 \ D

数字以外:[^ 0-9]。

4 \ s

空白文字:[\ t \ n \ x0B \ f \ r]

5 \ S

空白以外の文字:[^ \ s]。

6 \ w

単語文字:[a-zA-Z_0-9]。

7 \ W

単語以外の文字:[^ \ w]

以下は、Javaの正規表現を使用してPOSIX文字クラスを照合するさまざまな例です。

シニア番号 構築と一致
1 \ p {下}

小文字の英字:[az]。

2 \ p {上}

大文字の英字:[AZ]。

3 \ p {ASCII}

すべてASCII:[\ x00- \ x7F]。

4 \ p {アルファ}

英字:[\ p {Lower} \ p {Upper}]。

5 \ p {数字}

10進数:[0-9]。

6 \ p {Alnum}

英数字:[\ p {Alpha} \ p {Digit}]。

7 \ p {Punct}

句読点:! "#$%& '()* +、-。/:; <=>?@ [\] ^ _> {|} <のいずれか。

8 \ p {グラフ}

表示される文字:[\ p {Alnum} \ p {Punct}]。

9 \ p {印刷}

印刷可能な文字:[\ p {Graph} \ x20]。

10 \ p {空白}

スペースまたはタブ:[\ t]。

11 \ p {XDigit}

16進数:[0-9a-fA-F]。

12 \ p {スペース}

空白文字:[\ t \ n \ x0B \ f \ r]。

以下は、Javaの正規表現を使用してJAVA文字クラスを照合するさまざまな例です。

シニア番号 構築と一致
1 \ p {javaLowerCase}

java.lang.Character.isLowerCase()と同等です。

2 \ p {javaUpperCase}

java.lang.Character.isUpperCase()と同等です。

3 \ p {javaWhitespace}

java.lang.Character.isWhitespace()と同等です。

4 \ p {javaMirrored}

java.lang.Character.isMirrored()と同等です。

以下は、Javaで正規表現を使用してUnicode文字クラスを照合するさまざまな例です。

シニア番号 構築と一致
1 \ p {IsLatin}

ラテン文字。

2 \ p {InGreek}

ギリシャのブロックのキャラクター。

3 \ p {Lu}

大文字。

4 \ p {IsAlphabetic}

英字(バイナリプロパティ)。

5 \ p {Sc}

通貨記号。

6 \ P {InGreek}

ギリシャ語ブロックの1つを除くすべての文字。

7 [\ p {L} && [^ \ p {Lu}]]

大文字以外のすべての文字。

以下は、Javaで正規表現を使用する境界マッチャーのさまざまな例です。

シニア番号 構築と一致
1 ^

行の始まり。

2 $

行の終わり。

3 \ b

単語の境界。

4 \ B

単語以外の境界。

5 \ A

入力の始まり。

6 \ G

前の試合の終わり。

7 \ Z

入力の終わりですが、最後のターミネータがある場合はそれです。

8 \ z

入力の終わり。

貪欲な数量詞は、検索エンジンに文字列全体を検索し、指定された正規表現と一致するかどうかを確認するように指示します。以下は、Javaで正規表現を使用する貪欲な数量詞のさまざまな例です。

シニア番号 構築と一致
1 バツ?

X、一度またはまったくない。

2 バツ*

X、0回以上

3 X +

X、1回以上。

4 X {n}

X、正確にn回。

5 X {n、}

X、少なくともn回。

6 X {n、m}

X、n回以上m回以下

気が進まない数量詞は、検索エンジンが文字列の可能な限り短い部分から開始することを示します。一致が見つかると、エンジンは続行します。それ以外の場合は、チェック対象の文字列のセクションに1文字を追加し、それを検索します。このプロセスは、一致するものが見つかるか、文字列全体が使い果たされるまで続きます。以下は、Javaで正規表現を使用するReluctantQuantifiersのさまざまな例です。

シニア番号 構築と一致
1 バツ??

X、一度またはまったくない。

2 バツ*?

X、0回以上

3 X +?

X、1回以上。

4 X {n}?

X、正確にn回。

5 X {n、}?

X、少なくともn回。

6 X {n、m}?

X、n回以上m回以下

所有格の数量詞は、欲張りの数量詞に似ています。文字列全体をチェックしてエンジンを始動することを示します。動作しない場合、一致に失敗した場合、振り返ることがない場合は意味が異なります。以下は、Javaで正規表現を使用する所有格数量詞のさまざまな例です。

シニア番号 構築と一致
1 X?+

X、一度またはまったくない。

2 X * +

X、0回以上

3 X ++

X、1回以上。

4 X {n} +

X、正確にn回。

5 X {n、} +

X、少なくともn回。

6 X {n、m} +

X、n回以上m回以下

以下は、Javaで正規表現を使用する論理演算子のさまざまな例です。

シニア番号 構築と一致
1 XY

Xの後にYが続きます。

2 X | Y

XまたはYのいずれか。

印刷