解釋 Java 正則表示式中的量詞
Java 中的量詞是特殊字元,允許你指定字元或字元組在正則表示式中出現的次數。最常見的量詞是
*:其前面字元或字元集的一個或多個例項。
?:其前面字元或字元集的零個或一個例項。
+:其前面字元或字元集的一個或多個例項。
{n}:其前面字元或字元集的 n 個例項。
{n,}:其前面字元或字元集至少出現 n 次。
{n,m}:其前面字元或字元集的 n 到 m 個例項。
量詞可以是貪婪的、勉強匹配的或獨佔的。與勉強匹配的量詞相反,貪婪量詞嘗試儘可能少地匹配輸入文字。當獨佔量詞匹配完整的輸入文字時,它可能比量詞指示的前面字元或組的例項更少。
量詞型別
貪婪量詞
勉強匹配量詞
獨佔量詞
貪婪量詞
貪婪量詞是正則表示式中預設的量詞型別。它們嘗試匹配與模式匹配的最長可能的字串。例如,正則表示式 a+ 將字串 aaaa 匹配為 aaaa,而不是 a。
貪婪量詞首先處理整個字串。如果模式沒有被完整字串遵循,演算法將消除最後一個字元並重試。直到字串匹配模式或沒有更多字元可以刪除,此過程將繼續進行。
while()
這段 Java 程式碼在輸入“aaa”中查詢模式“a+”。它查詢此模式出現的位置,並顯示每個匹配項的起始和結束位置。程式輸出類似“模式找到範圍從 0 到 2”的訊息,指示它在輸入中找到模式的位置。
演算法
步驟 1:使用 Pattern.compile() 方法編譯正則表示式模式,模式為“a+”,並將其賦值給變數 p。
步驟 2:使用模式 p 上的 matcher() 方法並傳入輸入字串“aaa”,生成一個名為 m 的 Matcher 物件。
步驟 3:啟動一個 while 迴圈,用於迭代 Matcher 的匹配項。
步驟 4:使用 Matcher m 的 find() 方法檢查匹配項。
步驟 5:如果找到匹配項,則執行迴圈內的程式碼。
步驟 6:列印“模式找到範圍從”與 m.start() 和“到”以及 (m.end()-1) 的連線。
步驟 7:關閉 while 迴圈。
步驟 8:結束 main 方法和 TLP 類。
示例
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TLP
{
public static void main(String[] args)
{
Pattern p = Pattern.compile("a+");
Matcher m = p.matcher("aaa");
while (m.find())
System.out.println("Pattern found ranging from " + m.start() +
" to " + (m.end()-1));
}
}
輸出
Pattern found ranging from 0 to 2
勉強匹配量詞
非貪婪量詞與貪婪量詞相反。它們嘗試匹配與模式匹配的最短可能的字串。例如,正則表示式 a+? 將字串 aaaa 匹配為 a,而不是 aaaa。
while()
這段程式碼建立了一個正則表示式模式,該模式匹配一個或多個 a 字元,但它也允許零個 a 字元匹配。然後,程式碼為輸入字串“aaa”建立一個匹配器物件。匹配器物件用於查詢輸入字串中模式的所有例項。對於模式的每次出現,程式碼都會列印訊息“模式範圍從 start() 到 end()-1”。匹配器物件的 start() 和 end() 方法返回輸入字串中匹配項的起始和結束索引。
演算法
步驟 1:透過編譯正則表示式“a+?”建立 Pattern 物件。
步驟 2:透過向其傳遞輸入字串“aaa”來建立 Matcher 物件。
步驟 3:進入迴圈以查詢並列印輸入字串中的匹配項。
步驟 4:結果將顯示在輸入字串“aaa”中找到的匹配模式的起始和結束索引。
示例
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TLP
{
public static void main(String[] args)
{
Pattern p = Pattern.compile("a+?");
Matcher m = p.matcher("aaa");
while (m.find())
System.out.println("Pattern ranging from " + m.start() +
" to " + (m.end()-1));
}
}
輸出
Pattern ranging from 0 to 0 Pattern ranging from 1 to 1 Pattern ranging from 2 to 2
獨佔量詞
像貪婪量詞一樣,獨佔量詞匹配儘可能多的字元。然而,獨佔量詞與貪婪量詞相反,如果整個字串不遵循模式,則不嘗試從字串末尾刪除字元。
while()
這段程式碼建立了一個正則表示式模式,該模式匹配兩個字元 c 和 ++ 的序列。此示例然後為輸入字串“ccc”建立一個匹配器物件。匹配器物件用於查詢輸入字串中模式的所有例項。對於模式的每次出現,程式碼都會列印訊息“模式範圍從 start() 到 end()-1”。
演算法
步驟 1:宣告名為 TLP 的主類。
步驟 2:透過編譯正則表示式“c++”來建立一個 Pattern 物件。
步驟 3:透過向其傳遞輸入字串“ccc”來建立 Matcher 物件。
步驟 4:進入迴圈以查詢並列印輸入字串中的匹配項。
步驟 5:當代碼執行時,輸入字串“ccc”將顯示匹配模式“c++”的起始和結束索引。
示例
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TLP
{
public static void main(String[] args)
{
Pattern p = Pattern.compile("c++");
// Making an instance of Matcher class
Matcher m = p.matcher("ccc");
while (m.find())
System.out.println("Pattern ranging from from " + m.start() +
" to " + (m.end()-1));
}
}
輸出
Pattern ranging from from 0 to 2
結論
在 Java 正則表示式中,量詞指示字元或字元集在匹配中可以出現的次數。量詞有三種類型:獨佔的、勉強匹配的和貪婪的。
獨佔量詞精確匹配提供的字元數。貪婪量詞匹配儘可能多的字元。而勉強匹配量詞匹配儘可能少的字元。
以下是一些 Java 正則表示式中量詞的示例
a+ 匹配一個或多個 a 字元
a* 匹配零個或多個 a 字元
a? 匹配一個 a 字元或零個 a 字元
a{3} 精確匹配三個 a 字元
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP