Java正則表達式是一種強大的模式匹配工具,它用於在字符串中搜索和匹配特定模式的子串。在Java中,使用正則表達式需要使用java.util.regex包中的類。Java正則表達式的基礎用法非常簡單,但是靈活性和功能卻非常強大,當你熟練掌握它的使用方法後,可以解決多種文本處理問題。
一、基礎語法
Java正則表達式的基礎語法包括以下幾個內容:
1、字符集
在正則表達式中,字符集用方括號[]表示,表示一個匹配任意一個方括號中所包含的字符,在方括號中使用連字符(-)可以表示一個字符範圍。例如:
String regex = "[abc]"; // 匹配a、b、c中的任何一個字符 String regex2 = "[a-d]"; // 匹配a、b、c、d中的任何一個字符 String regex3 = "[^abc]"; // 匹配除了a、b、c之外的任何一個字符
2、通配符
在正則表達式中,通配符用英文句點(.)表示,表示可以匹配任意一個字符(除了換行符)。例如:
String regex = "a.c"; // 匹配任何以a開頭,以c結尾,中間是任意一個字符的字符串
3、重複次數
在正則表達式中,使用花括號{}來指定一個模式的重複次數,其中可以使用一個或兩個數字,表示精確的重複次數或範圍。例如:
String regex = "a{3}"; // 匹配連續的三個a String regex2 = "a{1,3}"; // 匹配連續的1到3個a String regex3 = "a{0,}"; // 匹配任意數量的a String regex4 = "a+"; // 匹配一個或多個a String regex5 = "a*"; // 匹配任意數量的a(甚至可以是0個) String regex6 = "a?"; // 匹配0個或1個a
4、邊界匹配
在正則表達式中,使用兩個特殊的元字符表示一個字符串的邊界,^表示字符串的開頭,$表示字符串的結尾。例如:
String regex = "^abc"; // 匹配以abc開頭的字符串 String regex2 = "xyz$"; // 匹配以xyz結尾的字符串 String regex3 = "^abc$"; // 匹配等於abc的字符串
5、字符轉義
在正則表達式中,有些字符具有特殊含義,例如句點(.)表示任意字符,方括號([])表示字符集等,在正則表達式中使用反斜杠(\)來轉義這些字符的特殊含義。例如:
String regex = "a\\.b"; // 匹配a.b的字符串 String regex2 = "\\[abc\\]"; // 匹配包含[abc]的字符串
二、高級用法
1、捕獲組
在正則表達式中使用圓括號()來表示一個分組,在分組中匹配的內容可以使用捕獲組來進行後續的操作。例如:
String regex = "(\\w+)\\s(\\w+)"; // 匹配一個類似“John Smith”這樣的字符串,其中名字和姓氏使用空格分隔 Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher("John Smith"); if (matcher.matches()) { String firstName = matcher.group(1); String lastName = matcher.group(2); }
2、預定義字符集
在正則表達式中,有一些預定義的字符集可以用來匹配特定類型的字符,例如數字、空白字符、單詞字符等等。例如:
String regex = "\\d+"; // 匹配任何一個數字 String regex2 = "\\s+"; // 匹配任何一個空白字符 String regex3 = "\\w+"; // 匹配任何一個單詞字符(字母、數字、下劃線) String regex4 = "\\W+"; // 匹配除了單詞字符以外的任何字符
3、零寬斷言
在正則表達式中,零寬斷言(Lookaround)用來查找在當前字符位置之前或之後的另一個字符串。零寬斷言不匹配任何字符,它只確定當前字符位置。例如:
String regex = "John(?=\\sSmith)"; // 匹配包含John且後面緊跟着一個空格和Smith的字符串,但不包括Smith。 String regex2 = "(?<=John\\s)Smith"; // 匹配包含Smith且前面是一個以John和一個空格開頭的字符串,但不包括John。
4、貪婪與懶惰
在正則表達式中,重複次數默認是貪婪的,例如如果重複次數設置為“*”時,它會儘可能地匹配更多的字符。如果想要改為懶惰的匹配,可以在重複次數後面添加個問號。例如:
String regex = "ab.*cd"; // 匹配以ab開頭,以cd結尾,中間任意字符的字符串 String regex2 = "ab.*?cd"; // 匹配以ab開頭,以cd結尾,中間匹配最少的字符的字符串
三、實例演示
下面的例子演示了如何使用正則表達式進行字符串匹配和替換。該例子展示了如何通過正則表達式匹配包含特定單詞的Java源代碼文件,並將匹配到的行替換為另一個字符串。
import java.util.regex.*; import java.nio.file.*; public class RegexDemo { public static void main(String[] args) throws Exception { String pattern = "\\bpublic\\b"; // 指定需要匹配的單詞 Path path = Paths.get("Hello.java"); // 指定需要搜索的Java源代碼文件 String content = new String(Files.readAllBytes(path)); // 讀取文件內容 Pattern regex = Pattern.compile(pattern); Matcher matcher = regex.matcher(content); StringBuffer result = new StringBuffer(); while (matcher.find()) { String replacement = matcher.group().toUpperCase(); // 將匹配到的單詞轉換為大寫 matcher.appendReplacement(result, replacement); } matcher.appendTail(result); // 在最後一次匹配之後添加尾部 String output = result.toString(); System.out.println(output); // 輸出替換後的文本 } }
在上個示例中,我們將讀取一個Java源代碼文件,並在其中搜索包含特定單詞的行。在這裡,我們使用正則表達式模式來指定需要搜索的單詞,然後使用Java的NIO API將文件的內容讀取成一個字符串。接下來,我們創建一個Pattern實例來編譯正則表達式模式,然後使用該模式在字符串內容中查找。在每次找到匹配時,我們將匹配到的單詞轉換為大寫,並將其附加到結果緩衝區中。最後,我們使用appendTail()方法將最後一段未匹配文本添加到結果緩衝區中,並輸出替換後的文本。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/304778.html