正則表示式也是一種語言,在解析字串領域獨領風騷。
本文分享關於正則表示式中最常用的關鍵字+、?的用法
工具/原料
IntelliJ IDEA
Java
Regular expressions
方法/步驟
前面講的正則表示式的關鍵字,大多是匹配一個字元
現實的應用中,肯定都是比一個字元多的,這些場景怎麼表示呢
這個問題前面已經提到過,“*”這個表示數量的關鍵字,表示“*”號前面的字串重複0次或無限次
有時候我就需要重複11次就可以,譬如匹配電話號碼
此時關鍵詞“*”就不滿足要求了
現在就來介紹下表示字串數量方面的其它關鍵字
+:這個關鍵字表示這樣的數量--“*”前面的字元可以重複1次或無限次
?:這個關鍵字表示這樣的數量--“?”前面的字元可以重複0次或1次
先來看看測試的腳手架程式碼:
Code:
package chapter4;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexStudyDemo {
public static void main(String[] args) {
String regexStr = "Hello[\\w\\W]!";
List
System.out.println(isMatch(input, regexStr));
} private static boolean isMatch(List
boolean result = true;
for (String input : inputs) {
Pattern pattern = Pattern.compile(regexStr);
Matcher matcher = pattern.matcher(input);
if (matcher.matches()) {
continue;
}
System.out.println(String.format("%s is not match %s", regexStr, input));
result = false;
}
return result;
}
}
解析一下程式碼
[\\w\\W]:這個正則表示式中只代表一個字元
上面的程式碼中,Hello和!之間的字元都大於1個,
"Hello[\\w\\W]!"都不能匹配
執行下看看結果
Output:
Hello[\w\W]! is not match Hello漢字!
Hello[\w\W]! is not match Hello !
Hello[\w\W]! is not match Hello !
Hello[\w\W]! is not match Hello787
false
與預期一致
OK
把"Hello[\\w\\W]!"這個正則表示式怎麼改改,讓正則表示式能夠匹配上面的字串
細心的tx已經想起上面提到的關鍵字“+”
好,更改下程式碼
Code:
String regexStr = "Hello[\\w\\W]+!";
List
按上面的解析,加上“+”這個關鍵字後,剛才不被匹配的字串,應該都可以被成功匹配
執行一下,看看結果
Output:
true
與預期一致
OK
"?"這個關鍵字,還沒有講到呢
是的,前面講到的關鍵字都是要匹配某種特定形態的字元,
還有一種場景,就是可能存在或不存在某種特定形態的字元
這種場景就是“?”關鍵字發揮作用的場景了
更改下程式碼:
String regexStr = "Hello[\\w\\W]?!";
List
按照上面的分析,更改後的正則表示式已經能匹配到,上面列的所有字串
執行下,看看結果
Output:
true