groovy regex groups(groovy正则表达式组)

先看一个java正则表达式的例子.

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TestMatch {
    public static void main(String[] args) {
        Pattern pattern = Pattern.compile("G.*");
        Matcher matcher = pattern.matcher("Groovy");
        System.out.println(matcher.matches());
    }
}

  其实这个代码的意思就是Groovy是不是匹配正则表达式G.*

为了一个简单的判断是不是匹配,就写这么多代码。看groovy是如何实现的。

matcher = "Groovy" =~ /G.*/

println(matcher.matches())

2行代码搞定。

正则表达式组(regex groups)又怎么用?再看一个groovy的例子.

text = """
Lorem 1:30 PM ipsum dolor 12:00 PM sit amet, consectetuer adipiscing elit.
"""

HOUR = /10|11|12|[0-9]/
MINUTE = /[0-5][0-9]/
AM_PM = /AM|PM/
time = /($HOUR):($MINUTE) ($AM_PM)/

matcher = text =~ time

println(matcher[0] == ["1:30 PM", "1", "30", "PM"]) //First Match

println(matcher[0][0] == "1:30 PM") //First match group in the first match
println(matcher[0][1] == "1") //Second match group in the first match (HOUR)
println(matcher[0][2] == "30") //Third match group in the first match (MINUTE)
println(matcher[0][3] == "PM") //Fourth match group in the first match (AM_PM)

println(matcher[1] == ["12:00 PM", "12", "00", "PM"]) //Second Match
println(matcher[1][0] == "12:00 PM") //First match group in the second match
println(matcher[1][1] == "12") //Second match group in the second match (HOUR)
println(matcher[1][2] == "00") //Third match group in the second match (MINUTE)
println(matcher[1][3] == "PM") //Fourth match group in the second match (AM_PM)

其中time就可以认为是一个正则表达式组,它有三个“组员”: ($HOUR),($MINUTE),($AM_PM)

注意,用()括起来才表示是一个“组员”,否则每个字符都是一个组员.要注意一个问题matcher.matches()意思是“是否整个字符串都匹配正则表达式”,对于这个例子,虽然text中有2个匹配,但是matcher.matches()的结果是false,因为对于整个字符串来说不匹配.通过这个细节可以体会正则表达式组的作用.

再看一个例子:

matcher = ".groovyd,aa3" =~ /(\.groovy.),(aa.)/
println(matcher.matches())
println(matcher.getCount())

/(\.groovy.),(aa.)/有2个“组员”

再看一个例子:

matcher = ".groovyd,aa3" =~ /\.groovy.,aa./
println(matcher.matches())

/\.groovy.,aa./有12个组员.

参考资料:

1. http://groovy.codehaus.org/Tutorial+5+-+Capturing+regex+groups

2. http://groovy.codehaus.org/FAQ+-+RegExp

3. http://developer.51cto.com/art/200906/129179.htm

4. http://docs.oracle.com/javase/7/docs/api/

时间: 12-14

groovy regex groups(groovy正则表达式组)的相关文章

Error:Cannot compile Groovy files: no Groovy library is defined for module 'xxxx' 错误处理

出现 Error:Cannot compile Groovy files: no Groovy library is defined for module 'xxxx' 只要在 project structure 中的modules中左上角的 + 号,然后找到groovy添加即可! 具体可参考: http://stackoverflow.com/questions/43450683/errorcannot-compile-groovy-files-no-groovy-library-is-def

具有相同模式的字符串,使用正则表达式组的提取和替换的案例

对具有相同模式的字符串内不同的组的提取怎样做呢,我是这样做的: 提取字符串:sourcetext:{name:john,data:[1,2,3],name:marry,data:[4,5,6]} 代码: Regex reg = new Regex(@"data:\[([\w|.|,]{1,})\]", RegexOptions.IgnoreCase); MatchCollection matches = reg.Matches(series); foreach (Match match

Regex 手机号 座机 正则表达式

最近在工作中需要判断一个号码是否是手机号,是否是座机号. 在网上也搜到了大家总结的方法,没有直接使用这些方法是因为:手机号码在不断开始新的号码段(比如17x),座机号中个别区号由于行政区域的变化而废除. 这里的手机和座机的正则表达式基于本文作者目前找到的最新的手机号码段,区号(截止到2015年8月). 座机号码:http://baike.baidu.com/view/103379.htm. new Regex(@"^0?(10|(2|3[1,5,7]|4[1,5,7]|5[1,3,5,7]|7[

[LeetCode] Positions of Large Groups 大群组的位置

In a string S of lowercase letters, these letters form consecutive groups of the same character. For example, a string like S = "abbxxxxzyy" has the groups "a", "bb", "xxxx", "z" and "yy". Call a

推荐一本学习Groovy的书籍Groovy程序设计!

有朋友公司在用groovy开发,于是推荐我学习一下,搜到了这本书: 花了一个月时间读完了这本书!写的很棒,几乎没有废话,全书都是很重要的知识点和很好的讲解,确实像封面说的那样,使用的好可以提高开发效率 唯一不足的可能是版本太旧了,而且java也在高速进步,12已经发布了,其实java并没有书里说的那么不堪,哈哈,java的lambda就很牛逼了, 虽然groovy的闭包更牛逼,想学习Groovy的童鞋,这本书一定要看,知识点很多! java知识分享网就可以下载高清pdf! 另外,这是我读书的时候

Matlab boxplot for Multiple Groups(多组数据的箱线图)

在画之前首先介绍一下Matlab boxplot,下面这段说明内容来自http://www.plob.org/2012/06/10/2153.html 由于matlab具有强大的计算功能,用其统计数据功能优点显而易见,这里分享使用matlab中的boxplot的一些技巧,供大家参考. Matlab boxplot命令 格式如下 boxplot(X):产生矩阵X的每一列的盒图和“须”图,“须”是从盒的尾部延伸出来,并表示盒外数据长度的线,如果“须”的外面没有数据,则在“须”的底部有一个点. www

[Training Video - 4] [Groovy] Constructors in groovy, this keyword

Bank.log = log Bank b1 = new Bank() b1.name = "BOA" b1.minbalance = 100 b1.city="London" Bank b2 = new Bank() b2.name = "HSBC" b2.minbalance = 100 b2.city="LA" Bank b3 = new Bank("A",100,"X") log

正则表达式--——组叠词

需求 将下列字符串转成:我要学编程: 我我...我我...我要..要要...要要...学学学..学学...编编编编....编程..程....程程程程..程. 1,将所有.去掉   s.replace("\.",""); 或者 s.replaceAll("\\.+",""); import java.lang.*; import java.util.*; class regText  { public static void m

Comparison of two groups比较两组数的混合算法

https://github.com/thomas-haslwanter/statsintro_python/tree/master/ISP/Code_Quantlets/08_TestsMeanValues/twoGroups