Groovy 正则表达式

简介: 其实这部分不足以写一篇文章,不过由于Groovy这方面工作做的很好,让我们使用Groovy处理正则表达式非常简单,所以我还是说说吧。正则表达式字符串首先说说斜杠字符串,主要用于正则表达式。

其实这部分不足以写一篇文章,不过由于Groovy这方面工作做的很好,让我们使用Groovy处理正则表达式非常简单,所以我还是说说吧。

正则表达式字符串

首先说说斜杠字符串,主要用于正则表达式。在斜杠字符串中不需要转义反斜杠,只有正斜杠需要转义。这让我们编写正则表达式非常方便,不像Java那样需要双斜杠(\\w+\\s这样的)。

def fooPattern = /.*foo.*/
assert fooPattern == '.*foo.*'

还有美元斜杠字符串,其中的所有字符都不会被转义。另外斜杠字符串和美元斜杠字符串都可以跨过多行。它主要也是用于编写更复杂的正则表达式。

def dollarSlashy = $/
    Hello $name,
    today we're ${date}.

    $ dollar sign
    $$ escaped dollar sign
    \ backslash
    / forward slash
    $/ escaped forward slash
    $/$ escaped dollar slashy string delimiter
/$

正则表达式运算符

模式运算符

我们可以用~用给定的字符串创建java.util.regex.Pattern对象。

def p = ~/foo/
assert p instanceof Pattern

查找运算符

我们可以使用=~运算符创建一个Matcher对象,然后我们可以将结果放到Groovy的任何布尔判断位置。Groovy会调用find方法查找是否存在指定的字符串。

def text = "some text to match"
def m = text =~ /match/                                           
assert m instanceof Matcher                                       
if (!m) {                                                         
    throw new RuntimeException("Oops, text not found!")
}

匹配运算符

匹配运算符==~和查找运算符类似,只不过这次直接返回布尔值,判断给定的文本是否和正则表达式匹配。

m = text ==~ /match/                                              
assert m instanceof Boolean                                       
if (m) {                                                          
    throw new RuntimeException("Should not reach that point!")
}

小练习

说了这么多,写个小例子验证一下这里的功能。文本截取自BBC某新闻。用前面的说的语法糖来处理一下文本。整个Groovy文件作为脚本执行。

//这次直接当做脚本用
def texts = '''
The Chinese premier described the world's second-largest economy as a butterfly struggling to emerge from a chrysalis.
He said this transformation was filled with promise but also great pain.
He repeatedly paid tribute to Communist Party leader Xi Jinping and said that under the sound leadership of the Party, the Chinese people had the courage and ingenuity to overcome all difficulties.'''

//p开头的单词
def startsWithP = /\b[pP]\w*\b/



def wordsStartsWithP = texts =~ startsWithP
println("p开头的单词")
while (wordsStartsWithP.find()) {
    print("${wordsStartsWithP.group()} ")
}
println()

//以y结尾的单词
def endsWithY = /^.*y$/
def words = ['happy', 'foolish', 'something', 'java','lucky']

def results = words.findAll { it ==~ endsWithY }.join(',')
println("y结尾的单词:$results")
相关文章
|
15天前
|
移动开发 Java Windows
Java 匹配\r 和 \n 的正则表达式如何编写
【10月更文挑战第19天】Java 匹配\r 和 \n 的正则表达式如何编写
56 3
|
Java Unix API
Kotlin:正则Regex原来这么方便
Regex相对于Java的Api来说,使用起来更加的简单,如果大家在非正则的功能使用时,比如寻找,替换,是否包含等等,完全可以使用字符串自带的功能即可,如果说要实现一些较为复杂的,比如邮箱的验证,手机号的验证等等,那么Regex绝对是你的首选。
312 0
Kotlin:正则Regex原来这么方便
|
XML 敏捷开发 IDE
Groovy 的介绍和简单的使用
Groovy 的介绍和简单的使用
Java处理正则表达式特殊字符转义
正则需要转义字符:'$', '(', ')', '*', '+', '.', '[', ']', '?', '\\', '^', '{', '}', '|' 异常现象: java.util.regex.PatternSyntaxException: Dangling meta. character '*' near index 0 解决方法: 对特殊字符加\\转义即可。
5372 0
|
Java
正则表达式的 Java语法
正则表达式的 Java语法
125 0
|
机器学习/深度学习 缓存 分布式计算
正则表达式(三):python re模块
以下示例所使用 python 版本为: 3.7 python 提供 re 模块,来满足正则表达式的使用。在开始介绍 re 模块之前,首先说明一下两个小内容: 转义字符 \ 转义字符作用是使得字符失去原本的意思,去表示另外一个作用。
837 0
|
Java Kotlin
Kotlin中正则表达式分析
一、首先来看一下Java中的正则表达式的写法 package cn.kotliner.java.regex; import java.
1549 0