regex - Groovy:对内部包含正则表达式的列表使用 "in"运算符

标签 regex groovy

是否可以对内部包含正则表达式的列表使用“in”运算符?

List myList = ["abc", "xyz", ~/a.+z/]

assert ("abc" in myList) == true
assert ("xyz" in myList) == true

assert ("abz" in myList) == true
assert ("aby" in myList) == false

感谢您的帮助。

最佳答案

我认为没有办法让它与 in 一起使用。我能想到的最好的方法是编写一个自定义方法,然后像这样运行它:

boolean isIn( List domain, String target ) {
  domain.find { target ==~ it }
}

List myList = ["abc", "xyz", ~/a.+z/]

assert ( isIn( myList, "abc" ) ) == true
assert ( isIn( myList, "xyz" ) ) == true
assert ( isIn( myList, "abz" ) ) == true
assert ( isIn( myList, "aby" ) ) == false

实际上,这是可能的,但您需要编写自己的 List 类:

class MyList extends ArrayList {
  boolean isCase( Object o ) {
    find { o ==~ it }
  }
}

def myList = new MyList()
myList.addAll( ["abc", "xyz", ~/a.+z/] )

assert ("abc" in myList) == true
assert ("xyz" in myList) == true

assert ("abz" in myList) == true
assert ("aby" in myList) == false

或者,覆盖列表实例元类上的 isCase 方法:

def myList = ["abc", "xyz", ~/a.+z/]
myList.metaClass.isCase = { o ->
  ( delegate.find { o ==~ it } ) as boolean
}
// asserts as before

关于regex - Groovy:对内部包含正则表达式的列表使用 "in"运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9309333/

相关文章:

groovy - 将 GString 存储在变量中并在运行时求值

javascript - 在字符串中的完整大写标题后添加换行符

groovy - @Grape 在具有多个文件的脚本中

c# - 正则表达式 - 如果开始匹配则匹配结束

regex - 使用ack或awk或比grep更好的方法从另一个文件中获取模式?

gradle - 如何在Gradle中实现此 'dynamic block'?

grails - 尝试使循环与GPar并行执行失败

groovy - 如何在每个测试用例中获取 email-ext groovy 脚本中的所有 robotsframework 警告?

regex - 正则语言与非正则语言

php - preg_match 多个单词