正則表示式30分鐘入門系列之7?

正則表示式也是一種語言,在解析字串領域獨領風騷。

本文分享關於正則表示式中最常用的關鍵字+、?的用法

工具/原料

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 input = Arrays.asList("Hello漢字!", "Hello !", "Hello !", "Hello787");

System.out.println(isMatch(input, regexStr));

} private static boolean isMatch(List inputs, String regexStr) {

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;

}

}

正則表示式30分鐘入門系列之7

解析一下程式碼

[\\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

正則表示式30分鐘入門系列之7

把"Hello[\\w\\W]!"這個正則表示式怎麼改改,讓正則表示式能夠匹配上面的字串

細心的tx已經想起上面提到的關鍵字“+”

好,更改下程式碼

Code:

String regexStr = "Hello[\\w\\W]+!";

List input = Arrays.asList("Hello漢字!", "Hello !", "Hello !", "Hello787 !");//更改這一行,是因為最後一個字串忘記寫"!"了

正則表示式30分鐘入門系列之7

按上面的解析,加上“+”這個關鍵字後,剛才不被匹配的字串,應該都可以被成功匹配

執行一下,看看結果

Output:

true

與預期一致

OK

正則表示式30分鐘入門系列之7

"?"這個關鍵字,還沒有講到呢

是的,前面講到的關鍵字都是要匹配某種特定形態的字元,

還有一種場景,就是可能存在或不存在某種特定形態的字元

這種場景就是“?”關鍵字發揮作用的場景了

更改下程式碼:

String regexStr = "Hello[\\w\\W]?!";

List input = Arrays.asList("Hello漢!", "Hello!", "Hello\n!", "Hello\r!");

正則表示式30分鐘入門系列之7

按照上面的分析,更改後的正則表示式已經能匹配到,上面列的所有字串

執行下,看看結果

Output:

true

正則表示式30分鐘入門系列之7

相關問題答案