如何在Groovy中检查字符串是否匹配模式

40

如何在Groovy中检查字符串是否符合某种模式?我的模式是“somedata:somedata:somedata”,我想要检查是否遵循了这种字符串格式。基本上,冒号是分隔符。

4个回答

45

Groovy正则表达式有一个==~运算符,可以确定您的字符串是否与给定的正则表达式模式匹配。

示例

// ==~ tests, if String matches the pattern
assert "2009" ==~ /\d+/  // returns TRUE
assert "holla" ==~ /\d+/ // returns FALSE

使用这个工具,你可以创建一个正则表达式匹配器来处理你的样本数据,代码如下:

// match 'somedata', followed by 0-N instances of ':somedata'...
String regex = /^somedata(:somedata)*$/

// assert matches...
assert "somedata" ==~ regex
assert "somedata:somedata" ==~ regex
assert "somedata:somedata:somedata" ==~ regex

// assert not matches...
assert "somedata:xxxxxx:somedata" !=~ regex
assert "somedata;somedata;somedata" !=~ regex

在这里阅读更多相关信息:

http://docs.groovy-lang.org/latest/html/documentation/#_match_operator


2
旧的 groovy.codehouse.org 网站已过期。请尝试访问以下网址:http://docs.groovy-lang.org/latest/html/documentation/#_regular_expression_operators - MarkHu
1
“assert not matches” 的示例应该像这样:assert !("somedata:xxxxxxxx:somedata" ==~ regex)!=~ 不是一个有效的操作符来否定正则表达式匹配:https://groovy-lang.org/operators.html#_regular_expression_operators - Joman68
@Joman68 - 我刚在 https://www.tutorialspoint.com/execute_groovy_online.php (Groovy 2.4.8) 上尝试了一下,代码可以正常运行。你试过吗?能否提供一个可重现的例子? - Nick Grealy
@NickGrealy 这里提供可重现的示例:https://groovyconsole.appspot.com/script/5129310184669184 - Joman68
另请参见 https://stackoverflow.com/a/19858242/3059685 和 https://dev59.com/mF0a5IYBdhLWcg3wqKKq#31220106。 - Joman68

5
在Groovy中,否定正则表达式匹配应该是:
 String regex = /^somedata(:somedata)*$/   
 assert !('somedata;somedata;somedata' ==~ regex)  // assert success!

4

尝试使用正则表达式,例如.+:.+:.+

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

def match = "somedata:somedata:somedata" ==~ /.+:.+:.+/

-5

我使用以下方法解决了这个问题:

myString.matches("\S+:\S+:\S+")


10
请求帮助,却不采纳建议。A+ - Lo-Tan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接