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/
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 str ...
- Groovy学习记录-------Groovy安装/配置
1.Groovy SDK下载 Groovy SDK官网下载地址: http://www.groovy-lang.org/download.html 每个版本有五个选项可供下载,依次为: binary ...
- 快学Scala 第十六课 (shell调用,正则表达式,正则表达式组,stripMargin妙用)
shell调用:(管道符前加#号,执行shell用!) import sys.process._ "ls -al" #| "grep x" ! 正则表达式:(r ...
- regEx in Groovy
// 使用正则 得到非纯XML文件中的信息 // Response 经常得到的不是纯XML def pattern = ~/(<NewDataSet>).*(<\/NewDataSe ...
- 使用开源库 Objective-C RegEx Categories 处理正则表达式
Objective-C RegEx Categories https://github.com/bendytree/Objective-C-RegEx-Categories 使用说明:将 RegExC ...
- [LeetCode] Positions of Large Groups 大群组的位置
In a string S of lowercase letters, these letters form consecutive groups of the same character. For ...
- [LeetCode] 839. Similar String Groups 相似字符串组
Two strings X and Y are similar if we can swap two letters (in different positions) of X, so that it ...
- 推荐一本学习Groovy的书籍Groovy程序设计!
有朋友公司在用groovy开发,于是推荐我学习一下,搜到了这本书: 花了一个月时间读完了这本书!写的很棒,几乎没有废话,全书都是很重要的知识点和很好的讲解,确实像封面说的那样,使用的好可以提高开发效率 ...
- Matlab boxplot for Multiple Groups(多组数据的箱线图)
在画之前首先介绍一下Matlab boxplot,下面这段说明内容来自http://www.plob.org/2012/06/10/2153.html 由于matlab具有强大的计算功能,用其统计 ...
随机推荐
- thinkphp ,进行关联模型的时候出现的问题,版本是3.2
看的后盾网络视频,里面操作的是3.1. 我用的是onethink,基于3.2. 在关联模式的操作时.主要是user role role_user 3个张表 视频中可以操作,但是本地操作出现问题. ...
- _foreach
从JDK1.5之后增加的foreach循环取消索引 for(类型 变量 : 数组 | 集合){ 每一次循环会自动将数组内容设置给变量 } 范例: ,,,} ; for(int x : i){ Syst ...
- java判断是否为汉字
java判断是否为汉字 public static boolean isChinese(String str) { String regEx = "[\u4e00-\u9fa5]&quo ...
- intel Xeon(R) CPU E5-2650 v2 性能测试报告
intel Xeon(R) CPU E5-2650 v2 ...
- windows下Nodejs环境部署
前言 Nodejs是基于v8引擎的轻量级框架,其特点为事件驱动.非阻塞.单线程.异步回调等. Nodejs相对于其他运行在服务器端的语言,容易学习,使用方便. 本文将介绍windows下Nodejs的 ...
- jfreechart图表汉字乱码问题解决方案
系统工作迁移环境 linux centos 6.5 tomcat8 mysql5.6 系统部署上之后,所有的jfreechart图表上的汉字,全部乱码. 如图: 经分析: 1)数据库动态读出来的是正常 ...
- Android组件生命周期(二)
引言 应用程序组件有一个生命周期——一开始Android实例化他们响应意图,直到结束实例被销毁.在这期间,他们有时候处于激活状态,有时候处于非激活状态:对于活动,对用户有时候可见,有时候不可见.组件生 ...
- 数据契约(DataContract)的作用
服务契约定义了远程访问对象和可供调用的方法,数据契约则是服务端和客户端之间要传送的自定义数据类型. 一旦声明一个类型为DataContract,那么该类型就可以被序列化在服务端和客户端之间传送,如下所 ...
- easyUI linkbutton组件
easyUI linkbutton组件: <!DOCTYPE html> <html lang="en"> <head> <meta ch ...
- Cms 总结(转)
提起开源cms,大家第一想到的是php的cms,因为php开源的最早,也最为用户和站长们认可,随着各大cms系统的功能的不断完善和各式各样的开源cms的出现,.net和java的高端的cms系统也逐渐 ...