Javaregex-quick-guide

提供:Dev Guides
移動先:案内検索

Java Regex-概要

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

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

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

  • パターンクラス-パターンオブジェクトは、正規表現のコンパイル済み表現です。 Patternクラスは、パブリックコンストラクターを提供しません。 パターンを作成するには、最初にパブリックstatic * compile()*メソッドの1つを呼び出してから、Patternオブジェクトを返す必要があります。 これらのメソッドは、最初の引数として正規表現を受け入れます。
  • * Matcherクラス*-Matcherオブジェクトは、パターンを解釈し、入力文字列に対して一致操作を実行するエンジンです。 Patternクラスと同様に、Matcherはパブリックコンストラクターを定義しません。 Matcherオブジェクトを取得するには、Patternオブジェクトで* matcher()*メソッドを呼び出します。
  • PatternSyntaxException -PatternSyntaxExceptionオブジェクトは、正規表現パターンの構文エラーを示す未チェックの例外です。

Java Regex-グループのキャプチャ

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

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

  • ((A)(B(C))))
  • (A)
  • (紀元前))
  • ©

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

式0を常に表す特別なグループgroup 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 Regex-MatchResultインターフェイス

前書き

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

インターフェイス宣言

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

public interface MatchResult

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

Sr.No Method & Description
1

int end()

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

2

int end(int group)

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

3

String group()

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

4

String group(int group)

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

5

int groupCount()

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

6

int start()

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

7

int start(int group)

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

Java Regex-パターンクラス

前書き

*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行モードを有効にします。

クラスメソッド

Sr.No Method & Description
1

static Pattern compile(String regex)

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

2

static Pattern compile(String regex, int flags)

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

3

int flags()

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

4

Matcher matcher(CharSequence input)

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

5

static boolean matches(String regex, CharSequence input)

指定された正規表現をコンパイルし、指定された入力と照合します。

6

String pattern()

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

7

static String quote(String s)

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

8

String[ split(CharSequence input)]

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

9

String[ split(CharSequence input, int limit)]

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

10

String toString()

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

継承されたメソッド

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

  • Java.lang.Object

Java Regex-マッチャークラス

前書き

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

クラス宣言

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

public final class Matcher
   extends Object
      implements MatchResult

クラスメソッド

Sr.No Method & Description
1

Matcher appendReplacement(StringBuffer sb, String replacement)

非終端追加および置換ステップを実装します。

2

StringBuffer appendTail(StringBuffer sb)

ターミナルの追加および交換手順を実装します。

3

int end()

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

4

int end(int group)

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

5

boolean find()

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

6

boolean find(int start)

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

7

String group()

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

8

String group(String name)

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

9

int groupCount()

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

10

boolean hasAnchoringBounds()

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

11

boolean hasTransparentBounds()

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

12

boolean hitEnd()

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

13

boolean lookingAt()

領域の先頭から開始して、パターンに対して入力シーケンスを一致させようとします。

14

boolean matches()

領域全体をパターンと一致させようとします。

15

Pattern pattern()

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

16

static String quoteReplacement(String s)

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

17

Matcher region(int start, int end)

このマッチャーのリージョンの制限を設定します。

18

int regionEnd()

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

19

int regionStart()

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

20

String replaceAll(String replacement)

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

21

String replaceFirst(String replacement)

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

22

boolean requireEnd()

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

23

Matcher reset()

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

24

Matcher reset(CharSequence input)

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

25

int start()

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

26

int start(int group)

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

27

MatchResult toMatchResult()

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

28

String toString()

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

29

Matcher useAnchoringBounds(boolean b)

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

30

Matcher usePattern(Pattern newPattern)

このMatcherが一致の検索に使用するパターンを変更します。

31

Matcher useTransparentBounds(boolean b)

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

継承されたメソッド

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

  • Java.lang.Object

Java Regex-PatternSyntaxExceptionクラス

前書き

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

クラス宣言

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

public class PatternSyntaxException
   extends IllegalArgumentException

コンストラクタ

Sr.No Method & Description
1

PatternSyntaxException(String desc, String regex, int index)

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

クラスメソッド

Sr.No Method & Description
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.finddevguides;

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 Regex-文字に一致する例

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

Sr.No Construct & Matches
1

x

文字x

2

link:/javaregex/javaregex_characters_backslash[\\]

バックスラッシュ文字

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 Regex-一致する文字クラス

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

Sr.No Construct & Matches
1

[abc]

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

2

[abc]

a、b、またはc以外の任意の文字(否定)。

3

[a-zA-Z]

aからzまたはAからZ(両端を含む)(範囲)。

4

[a-d[m-p]]

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

5

[a-z&&[def]]

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

6

[a-z&&[^bc]]

bおよびcを除くa〜z:[ad-z](減算)

7

[a-z&&[^m-p]]

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

事前定義された文字クラスの一致

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

Sr.No Construct & Matches
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]

一致するPOSIX文字クラス

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

Sr.No Construct & Matches
1

\p{Lower}

小文字のアルファベット文字:[a-z]。

2

\p{Upper}

大文字のアルファベット文字:[A-Z]。

3

\p{ASCII}

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

4

\p{Alpha}

アルファベット文字:[\ p \ {Lower} \ p \ {Upper}]。

5

\p{Digit}

10進数:[0-9]。

6

\p{Alnum}

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

7

\p{Punct}

句読点:! "#$%& '()* +、-。/:; <⇒?@ [\] ^ _> \ {

} <。>のいずれか 8

\p{Graph}

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

9

\p{Print}

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

10

\p{Blank}

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

11

\p{XDigit}

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

12

一致するJAVA文字クラス

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

Sr.No Construct & Matches
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()と同等です。

一致するUnicode文字クラス

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

Sr.No Construct & Matches
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で正規表現を使用した境界マッチャーのさまざまな例です。

Sr.No Construct & Matches
1

/javaregex/javaregex_boundary_matcher_begin

行の始まり。

2

$

行の終わり。

3

\b

単語の境界。

4

\B

単語以外の境界。

5

\A

入力の始まり。

6

\G

前の試合の終わり。

7

\Z

入力の終わり。ただし、最終ターミネーターがあればそれ。

8

\z

入力の終わり。

Java正規表現の貪欲な数量詞

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

Sr.No Construct & Matches
1

X?

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

2

X*

X、ゼロ回以上

3

X+

X、1回以上。

4

X{n}

X、正確にn回。

5

X\{n,}

X、少なくともn回。

6

X\{n,m}

X、少なくともnだがm回以下

消極的数量詞の例

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

Sr.No Construct & Matches
1

X??

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

2

X*?

X、ゼロ回以上

3

X+?

X、1回以上。

4

X{n}?

X、正確にn回。

5

X\{n,}?

X、少なくともn回。

6

X\{n,m}?

X、少なくともnだがm回以下

所有数量詞の例

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

Sr.No Construct & Matches
1

X?+

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

2

X*+

X、ゼロ回以上

3

X++

X、1回以上。

4

X{n}+

X、正確にn回。

5

X\{n,}+

X、少なくともn回。

6

X\{n,m}+

X、少なくともnだがm回以下

Java Regex-論理演算子の例

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

Sr.No Construct & Matches
1

XY

Xの後にY

2 link:/javaregex/javaregex_logical_xory[X

link:/cgi-bin/printpage.cgi [__印刷]