首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Groovy 正則表達式完全指南:斜線語法、三大操作符與實戰技巧

     編輯:Java 相關知識

為什麼 Groovy 寫正則更爽?

Java 需處理 Pattern/Matcher、雙重轉義、樣板代碼。Groovy 封裝並提供:

  • 斜線字符串 /.../:免雙重轉義。
  • 模式操作符 ~:字符串 → Pattern。
  • 查找操作符 =~:字符串 + 模式 → Matcher。
  • 匹配操作符 ==~:整串匹配 → boolean。

基礎語法

assert (/Hello World/ in String)
assert (/Hi \there/ == 'Hi \\there') // 單反斜線即可

def p = ~/\b[a-zA-Z]\b/  // 等同 Pattern.compile("\\b[a-zA-Z]\\b")

常用模式速查表

模式含義
a?0 或 1 個 a
a*0 或多個 a
a+1 或多個 a
a|ba 或 b
(ab)分組
.任意字符
[abc]a、b 或 c
[^abc]非 a/b/c
[a-z]小寫字母
\d數字 [0-9]
\s空白字符
\w字母/數字/下劃線
\b單詞邊界
^行首
$行尾

三大操作符實戰

1. 查找操作符 =~ → Matcher

def matcher = "Groovy" =~ /G.*/
assert matcher instanceof Matcher
assert matcher.matches()

Matcher 視為二維矩陣:matcher[0] 為第一個匹配整串,matcher[0][1] 為第一組捕獲組。

2. 分組捕獲範例

def text = """Lorem 1:30 PM ipsum dolor 12:00 PM sit amet"""
def HOUR = /10|11|12|[0-9]/
def MINUTE = /[0-5][0-9]/
def AM_PM = /AM|PM/
def time = /($HOUR):($MINUTE) ($AM_PM)/

def matcher = text =~ time
assert matcher[0] == ["1:30 PM", "1", "30", "PM"]
assert matcher[1] == ["12:00 PM", "12", "00", "PM"]

3. 匹配操作符 ==~ → boolean

assert "Groovy" ==~ /G.*/
assert 123 ==~ /\d+/
assert !(123 ==~ /\D+/)

字符串替換增強

// 首次替換
assert "Welcome To Groovy" == "Welcome 2 Groovy".replaceFirst(/\d/, "To")

// 閉包處理每個捕獲組
assert "Hello GROOVY, GROOVY rocks" ==
    "Hello Groovy, Groovy rocks".replaceAll("Groovy") { it[0].toUpperCase() }

集合過濾 grep

assert ["Groovy"] == ["Groovy", "Rocks"].grep(~/G.*/)

最佳實踐建議

  1. 優先用 /.../ 斜線字符串,減少轉義認知負荷。
  2. 複雜正則拆解為具名變數(如 HOUR、MINUTE),提升可讀性。
  3. 需整串匹配用 ==~,查找提取用 =~,編譯複用用 ~。
  4. 替換邏輯複雜時,閉包版 replaceAll 表達力最強。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved