日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
在Groovy中編寫(xiě)正則表達(dá)式

與Java相比, 在Groovy中編寫(xiě)正則表達(dá)式(regexes)簡(jiǎn)直是一種樂(lè)趣。在Java中, regexes編程不僅需處理Pattern和Matcher對(duì)象,而且還要編寫(xiě)繁瑣的樣板代碼(boilerplate coding)。而Groovy對(duì)這兩個(gè)Java對(duì)象做了簡(jiǎn)單封裝,添加了一些額外的實(shí)用方法,并給出一個(gè)簡(jiǎn)化的新的語(yǔ)法和3個(gè)新的操作符。

讓客戶(hù)滿(mǎn)意是我們工作的目標(biāo),不斷超越客戶(hù)的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶(hù),將通過(guò)不懈努力成為客戶(hù)在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、虛擬主機(jī)、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、城北網(wǎng)站維護(hù)、網(wǎng)站推廣。

Groovy中,您可用slashy(斜線)語(yǔ)法“/../”定義字符串。這樣以來(lái)便可避免在Java正則表達(dá)式中使用過(guò)多的反斜線。例如:

 
 
 
  1. assert (/Hello World/ in String)  
  2. assert (/Hi \there/ == 'Hi \\there')  

Groovy新增的第1個(gè)正則表達(dá)式操作符便是模式操作符(~),它使得字符串被編譯成一個(gè)Pattern實(shí)例。例如:

 
 
 
  1. p = ~/\b[a-zA-Z]\b/ 

也可使用Java實(shí)現(xiàn),如:

 
 
 
  1. import java.util.regex.*  
  2. Pattern p = Pattern.compile("\\b[a-zA-Z]\\b");  

表3.1中列出了常用的正則表達(dá)式模式及含義。完整的正則表達(dá)式清單可參考Pattern API文檔,http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/Pattern.html。

表3.1 常用的正則表達(dá)式模式

模式 含義
 
a?
 盡可能匹配1次a,也可以不匹配
 
a*
 表達(dá)式盡可能的多匹配a,最少可以不匹配
 
a+
 盡可能的多匹配a,至少匹配1次
 
a|b
 匹配a或b
 
(ab)
 分組
 
.
 匹配任意一個(gè)字符
 
[abc]
 匹配a,b或c
 
[^abc]
 匹配除了a,b或c的任意一個(gè)字符
 
[a-z]
 匹配a到z之間的任意一個(gè)字母
 
\d
 任意一個(gè)數(shù)字,0-9 中的任意一個(gè)
 
\s
 空格、制表符、換頁(yè)符等空白字符的其中任意一個(gè)
 
\w
 任意一個(gè)字母或數(shù)字或下劃線,也就是 A-Z,a-z,0-9,_ 中任意一個(gè)
 
\b
 匹配一個(gè)單詞邊界,也就是單詞和空格之間的位置,不匹配任何字符
 
^
 與字符串開(kāi)始的地方匹配,不匹配任何字符
 
$
 與字符串結(jié)束的地方匹配,不匹配任何字符

第2個(gè)操作符是查找操作符(=~),它負(fù)責(zé)從左邊的字符串和右邊的模式來(lái)創(chuàng)建一個(gè)Matcher對(duì)象。

 
 
 
  1. import java.util.regex.Matcher  
  2. def matcher = "Groovy" =~ /G.*/  
  3. assert matcher in Matcher  
  4. assert matcher.matches()  

同理,其Java實(shí)現(xiàn),如:

 
 
 
  1. import java.util.regex.*;  
  2. Pattern pattern = Pattern.compile("G.*");  
  3. Matcher matcher = pattern.matcher("Groovy");  
  4. matcher.matches();  

您可把Matcher對(duì)象看作一個(gè)二維矩陣。第1維表示每一個(gè)與模式相匹配的字符串;第2維表示每個(gè)匹配內(nèi)的捕獲組(capture group),詳見(jiàn)清單3.2中的例子。

清單3.2 Using Regexes Groups with Matcher

 
 
 
  1. def text = """  
  2. Lorem 1:30 PM ipsum dolor 12:00 PM sit amet, consectetuer adipiscing elit.  
  3. """  
  4.  
  5. def HOUR = /10|11|12|[0-9]/  
  6. def MINUTE = /[0-5][0-9]/  
  7. def AM_PM = /AM|PM/  
  8. def time = /($HOUR):($MINUTE) ($AM_PM)/  
  9.  
  10. def matcher = text =~ time  
  11.  
  12. assert matcher[0] == ["1:30 PM", "1", "30", "PM"] //First Match  
  13.  
  14. assert matcher[0][0] == "1:30 PM" //First match group in the first match  
  15. assert matcher[0][1] == "1" //Second match group in the first match (HOUR)  
  16. assert matcher[0][2] == "30" //Third match group in the first match (MINUTE)  
  17. assert matcher[0][3] == "PM" //Fourth match group in the first match (AM_PM)  
  18.    
  19. assert matcher[1] == ["12:00 PM", "12", "00", "PM"] //Second Match  
  20. assert matcher[1][0] == "12:00 PM" //First match group in the second match  
  21. assert matcher[1][1] == "12" //Second match group in the second match (HOUR)  
  22. assert matcher[1][2] == "00" //Third match group in the second match (MINUTE)  
  23. assert matcher[1][3] == "PM" //Fourth match group in the second match (AM_PM) 

***一個(gè)是匹配操作符(==~),該操作符返回一個(gè)Boolean值,說(shuō)明操作符左側(cè)的整個(gè)字符串是否右側(cè)的模式相匹配,例如:

 
 
 
  1. assert "Groovy" ==~ /G.*/  
  2. assert 123 ==~ /\d+/  
  3. assert !123 ==~ /\D+/  

正則表達(dá)式也可與String的replace*形式的方法(如replaceFirst等)結(jié)合使用。例如:

 
 
 
  1. //把***次出現(xiàn)的數(shù)字替換為“To”   
  2. assert "Welcome To Groovy" == "Welcome 2 Groovy".replaceFirst(/\d/, "To")  

GDK String還提供了一個(gè)可接受閉包的replace方法,該閉包可用來(lái)操作每個(gè)捕捉組(captured group),例如

 
 
 
  1. //把所有的“Groovy”轉(zhuǎn)換為大寫(xiě)形式  
  2. "Hello GROOVY, GROOVY rocks" == "Hello Groovy, Groovy rocks" 
  3. .replaceAll("Groovy") {Object[] it ->it[0].toUpperCase()}  

您可以使用grep方法,該方法利用正則表達(dá)式篩選一個(gè)集合,并返回集合中滿(mǎn)足給定過(guò)濾條件的元素。例如:

 
 
 
  1. //返回集合中以“G”開(kāi)頭的元素  
  2. assert ["Groovy"] == ["Groovy","Rocks"].grep(~/G.*/)  

【編輯推薦】

  1. 在Groovy中使用字符串
  2. Groovy腳本文件中的靜態(tài)main方法
  3. 基于JVM的語(yǔ)言正在開(kāi)始流行
  4. 專(zhuān)題:Groovy開(kāi)發(fā)技術(shù)
  5. 專(zhuān)題:Scala編程語(yǔ)言

當(dāng)前文章:在Groovy中編寫(xiě)正則表達(dá)式
當(dāng)前地址:http://www.dlmjj.cn/article/cohhgeg.html