正則表達式界說了字符串的形式。
正則表達式能夠用來搜索、修改或處理文本。
Java初學者有什麼不懂的可以私信我——我剛整理了一套2018最新的0基礎入門和進階教程,無私分享。
獲取方法:私信小編回覆:資料(點開小編頭像,右上角有發私信)群裡還有開發工具和安裝包,以及系統學習路線圖。
正則表達式並不僅限於某一種言語,在Java、JavaScript等言語都存在,但是在每種言語中有纖細的不同。
正則表達式實例
一個字符串其實就是一個簡略的正則表達式,例如 Hello World正則表達式匹配 "Hello World" 字符串。
.(點號)也是一個正則表達式,它匹配任何一個字符如:"a" 或 "1"。
^\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);
// 現在創立 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
閱讀更多 淺霧描紅妝 的文章