概要:正規表現(javaのデモ)

最近、何かの爬虫類は、偶然に正規表現をブラッシュアップし、一致しませんでした。javaのでデモ仕上げ。

単一文字の一致

1、任意の文字に一致します

ここでは、任意の文字に一致させるためにポイントを使用します(。)

System.out.println("abc".matches("a.c"));
System.out.println("a$c".matches("a.c"));
System.out.println("acc".matches("a.c"));

ここでの出力が真です。

図2に示すように、マッチング番号

\\最初のスラッシュ上記dは意図\ dはエスケープされて一致するように、本明細書中で\ dは、使用します。上記の結果は、以下がfalseで、真実です。

System.out.println("007".matches("00\\d"));
System.out.println("00a".matches("00\\d"));

図3に示すように、一般に使用される文字にマッチします

ここでは、一般的に使用される文字が参照され、文字数字またはアンダースコア。ワット\で、彼は本当の存在であると述べました。

System.out.println("javac".matches("java\\w"));
System.out.println("java_".matches("java\\w"));
System.out.println("java1".matches("java\\w"));

4、マッチングスペース文字

\ sのマッチさらに(\トン意味して、Javaでの)タブ文字を備えたスペース文字、スペースを含むだけでなく、注意空白文字、と

System.out.println("java ".matches("java\\s"));

図5に示すように、非マッチングデジタル

\ dの数と一致し、そして\ Dは、非マッチング数です。例えば、00 \ Dの試合。

マッチングルール

正規表現

ルール

一致させることができます

A

指定された文字

A

\ u548c

Unicode文字を指定します。

任意の文字

A、B、&、0

\ dは

数字0から9

0〜9

\ワット

大文字と小文字、数字、アンダースコア

〜Z、A〜Z、0〜9、_

\ sの

スペース、Tabキー

スペース、タブ

\ D

非数値

、A、&、_、......

\ W

非\ワット

&、@、で......

\ S

非\ sの

、A、&、_、......

第二に、リピートマッチ

*修飾子を使用すると、0文字を含む任意の文字に一致させることができます。

System.out.println("java".matches("java\\d*"));
System.out.println("java1".matches("java\\d*"));
System.out.println("java11".matches("java\\d*"));
System.out.println("java123".matches("java\\d*"));

とりわけ、それは本当です。

+使用する修飾子は、少なくとも一つの文字を一致させることができます。

修飾子の使用?ゼロまたは1つの文字に一致します。

正確にn文字を指定します。

System.out.println("java123".matches("java\\d{3}"));
System.out.println("java1".matches("java\\d{3}"));

マッチングルール

正規表現

ルール

一致させることができます

A *

任意の数の文字

空、A、AA、AAA、......

A +

少なくとも一つの文字

A、AA、AAA、......

A?

0または1文字

空の、A

A {3}

文字の数を指定します。

AAA

A {2,3}

文字の数は、範囲を指定しました

AA、AAA

A {2}

少なくともn文字

AA、AAA、AAAA、......

A {0,3}

n文字まで

空、A、AA、AAA

第三に、複雑な一致

(1)最初と試合終了

^、$終わりを表しての始まりを表します。例えば、^ A \ D {3} $、マッチ "A001"、 "A380"。

(2)指定された範囲と一致します

[1-9]、[0-9A-FA-F]、[^ 1-9] {3}、[...]、[123456789] \ D {6,7}の範囲内で一致する文字に使用することができます

(3)ルール・マッチングまたは

2つの正規のルールや規則が接続されている、例えば、AB | |とCDが表すABまたはCDを一致させることができます。

(4)使用括弧

String re = "learn\\s(java|php|go)";
System.out.println("learn java".matches(re));
System.out.println("learn Java".matches(re));
System.out.println("learn php".matches(re));
System.out.println("learn Go".matches(re));

 

 

正規表現

ルール

一致させることができます

^

初め

文字列の先頭

$

エンディング

文字列の末尾

[ABC]

[...]任意の文字

A、B、C

[A-F0-9xy]

文字の指定した範囲

A、...、F、0、...、9、X、Y

[^ AF]

指定された範囲外の任意の文字

非A〜F

AB | CD | EF

ABまたはCDもしくはEF

AB、CD、EF

 

第四に、グループ化一致

パケットは、非常に重要なポイントが取られる部分文字列にマッチします。

Pattern p = Pattern.compile("(\\d{3,4})\\-(\\d{7,8})");
Matcher m = p.matcher("010-12345678");
if (m.matches()) {
    String g1 = m.group(1);
    String g2 = m.group(2);
    System.out.println(g1);
    System.out.println(g2);
} else {
    System.out.println("匹配失败!");
}

注意することは重要最初のサブストリングのための方法1によってパラメータMatcher.group(インデックス)は、2は、第2のサブストリングを表すこと。私たちはそれを得る0'll渡す場合は?答えは010から12345678であり、全体の定期的な文字列に一致する正規表現コードが前回コードに使用されているが、我々は、コード抽出されたパケットjava.utilのに使用String.matches()メソッドです。パターンマッチのクラスとクラス内の正規表現パッケージ。方法パターンマッチクラスと内部String.matches()メソッドの呼び出しであるとして、実際には2つのコードは、本質的に同じです。

毎回同じパターンのオブジェクトを作成しますので、しかし、正規表現のために使用String.matches()何回も少ない効率的な試合を繰り返しました。Patternオブジェクトは、繰り返しの使用を作成することができ、それが複数の一致、一度コンパイルを達成することができます。

Pattern pattern = Pattern.compile("(\\d{3,4})\\-(\\d{7,8})");
pattern.matcher("010-12345678").matches(); // true
pattern.matcher("021-123456").matches(); // true
pattern.matcher("022#1234567").matches(); // false
// 获得Matcher对象:
Matcher matcher = pattern.matcher("010-12345678");
if (matcher.matches()) {
    String whole = matcher.group(0); // "010-12345678", 0表示匹配的整个字符串
    String area = matcher.group(1); // "010", 1表示匹配的第1个子串
    String tel = matcher.group(2); // "12345678", 2表示匹配的第2个子串
    System.out.println(area);
    System.out.println(tel);
}

非貪欲試合:

1230000文字列照合例えば、I 0の二つの文字列は、前面123及び背面部分を傍受するためにされたいです。

もし「(\\ D +)(0 *)」完全一致123万すべての試合が、されたサブストリングの背面につながる場合には試合には、\ Dになります「」これは貪欲な試合です。非欲張りマッチを完成するために+を使用します?。

Pattern pattern = Pattern.compile("(\\d+?)(0*)");
Matcher matcher = pattern.matcher("1230000");
if (matcher.matches()) {
    System.out.println("group1=" + matcher.group(1)); // "123"
    System.out.println("group2=" + matcher.group(2)); // "0000"
}

第五に、検索と置換

正規表現のマッチングが完了し、置換文字列ことができます。

(1)文字列を分割します

"a b c".split("\\s"); // { "a", "b", "c" }
"a b  c".split("\\s"); // { "a", "b", "", "c" }
"a, b ;; c".split("[\\,\\;\\s]+"); // { "a", "b", "c" }

(2)検索文字列

String s = "the quick brown fox jumps over the lazy dog.";
Pattern p = Pattern.compile("\\wo\\w");
Matcher m = p.matcher(s);
while (m.find()) {
    String sub = s.substring(m.start(), m.end());
    System.out.println(sub);
}

(3)置換文字列

String s = "The     quick\t\t brown   fox  jumps   over the  lazy dog.";
String r = s.replaceAll("\\s+", " ");
System.out.println(r); // "The quick brown fox jumps over the lazy dog."

(4)バック参照

 String s = "the quick brown fox jumps over the lazy dog.";
String r = s.replaceAll("\\s([a-z]{4})\\s", " <b>$1</b> ");
System.out.println(r);

发布了134 篇原创文章 · 获赞 91 · 访问量 16万+

おすすめ

転載: blog.csdn.net/weixin_44588495/article/details/104081047