最近、何かの爬虫類は、偶然に正規表現をブラッシュアップし、一致しませんでした。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);