Java的正則表達式和捕獲組

正則表達式界說了字符串的形式。

正則表達式能夠用來搜索、修改或處理文本。

Java初學者有什麼不懂的可以私信我——我剛整理了一套2018最新的0基礎入門和進階教程,無私分享。

獲取方法:私信小編回覆:資料(點開小編頭像,右上角有發私信)群裡還有開發工具和安裝包,以及系統學習路線圖。

Java的正則表達式和捕獲組

Java的正則表達式和捕獲組

正則表達式並不僅限於某一種言語,在Java、JavaScript等言語都存在,但是在每種言語中有纖細的不同。

正則表達式實例

一個字符串其實就是一個簡略的正則表達式,例如 Hello World正則表達式匹配 "Hello World" 字符串。

.(點號)也是一個正則表達式,它匹配任何一個字符如:"a" 或 "1"。

Java的正則表達式和捕獲組

^\d+(\.\d+)?

^ 界說了以什麼開端

\d+ 匹配一個或多個數字

? 設置括號內的選項是可選的

\. 匹配 "."

能夠匹配的實例:"5", "1.5" 和 "2.21"。

Java正則表達式中的類

Java 正則表達式和 Perl 的是最為類似的。

java.util.regex 包首要包括以下三個類:

Pattern 類:pattern 目標是一個正則表達式的編譯表明。Pattern 類沒有公共結構辦法。要創立一個 Pattern 目標,你有必要首要調用其公共靜態編譯辦法,它回來一個 Pattern 目標。該辦法承受一個正則表達式作為它的第一個參數。Matcher 類:Matcher 目標是對輸入字符串進行解釋和匹配操作的引擎。與Pattern 類相同,Matcher 也沒有公共結構辦法。你需求調用 Pattern 目標的 matcher 辦法來取得一個 Matcher 目標。PatternSyntaxException:PatternSyntaxException 是一個非強制反常類,它表明一個正則表達式形式中的語法錯誤。

以下實例中使用了正則表達式 .*china.*用於查找字符串中是否包了 china子串:

import java.util.regex.*;

class RegexExample1{

public static void main(String args[]){

String content = "I am noob " +

"from china.com.";

String pattern = ".*china.*";

boolean isMatch = Pattern.matches(pattern, content);

System.out.println("字符串中是否包括了 'runoob' 子字符串? " + isMatch);

}

}

Java正則表達式中的捕獲組

捕獲組是把多個字符當一個獨自單元進行處理的辦法,它經過對括號內的字符分組來創立。

例如,正則表達式 (dog) 創立了單一分組,組裡包括"d","o",和"g"。

捕獲組是經過從左至右核算其開括號來編號。例如,在表達式((A)(B(C))),有四個這樣的組:

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

能夠經過調用 matcher 目標的 groupCount 辦法來檢查表達式有多少個分組。groupCount 辦法回來一個 int 值,表明matcher目標當時有多個捕獲組。

還有一個特別的組(group(0)),它總是代表整個表達式。該組不包括在 groupCount 的回來值中。

比如:

下面的比如說明怎麼從一個給定的字符串中找到數字串:

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class RegexMatches

{

public static void main( String args[] ){

// 按指定形式在字符串查找

String line = "This order was placed for QT3000! OK?";

String pattern = "(\\D*)(\\d+)(.*)";

// 創立 Pattern 目標

Pattern r = Pattern.compile(pattern);

Java的正則表達式和捕獲組

// 現在創立 matcher 目標

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) );

System.out.println("Found value: " + m.group(3) );

} else {

System.out.println("NO MATCH");

}

}

}

運行結果是:

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

Found value: This order was placed for QT

Found value: 3000

Found value: ! OK?

"Finalizer" #3 daemon prio=8 os_prio=0 tid=0x00007f0568083800 nid=0x2a58 in Object.wait() [0x00007f0552d14000]

java.lang.Thread.State: WAITING (on object monitor)

at java.lang.Object.wait(Native Method)

- waiting on(a java.lang.ref.ReferenceQueue$Lock)

at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)

- locked(a java.lang.ref.ReferenceQueue$Lock)

at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)

at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)

"Reference Handler" #2 daemon prio=10 os_prio=0 tid=0x00007f056807f000 nid=0x2a57 in Object.wait() [0x00007f0552e15000]

java.lang.Thread.State: WAITING (on object monitor)

at java.lang.Object.wait(Native Method)

- waiting on(a java.lang.ref.Reference$Lock)

at java.lang.Object.wait(Object.java:502)

at java.lang.ref.Reference.tryHandlePending(Reference.java:191)

- locked(a java.lang.ref.Reference$Lock)

at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153)

"main" #1 prio=5 os_prio=0 tid=0x00007f0568009000 nid=0x2a51 runnable [0x00007f056ffc7000]

java.lang.Thread.State: RUNNABLE

at While.add(While.java:13)

at While.main(While.java:7)

"VM Thread" os_prio=0 tid=0x00007f0568077800 nid=0x2a56 runnable

"GC task thread#0 (ParallelGC)" os_prio=0 tid=0x00007f056801e800 nid=0x2a52 runnable

"GC task thread#1 (ParallelGC)" os_prio=0 tid=0x00007f0568020000 nid=0x2a53 runnable

"GC task thread#2 (ParallelGC)" os_prio=0 tid=0x00007f0568022000 nid=0x2a54 runnable

"GC task thread#3 (ParallelGC)" os_prio=0 tid=0x00007f0568024000 nid=0x2a55 runnable

"VM Periodic Task Thread" os_prio=0 tid=0x00007f05680df800 nid=0x2a5e waiting on condition

JNI global references: 9

Java的正則表達式和捕獲組


分享到:


相關文章: