【问题标题】:Groovy not matching left braces in regexGroovy 与正则表达式中的左大括号不匹配
【发布时间】:2016-05-10 16:30:36
【问题描述】:

这里是 Groovy 2.4。我有一个我想匹配的字符列表,具体来说:

`;[]&?:()|

我的最佳尝试:

import java.util.regex.Matcher;

Matcher matcher
String illNameChars = /[`\/;\[\]&<>?:\()|-]+/
String input = "Bupo;dupo"
if(input) {
    matcher = input =~ illNameChars
    if(matcher.matches()) {
        println "Illegal character detected!"
    }
}

这适用于第一个字符(反引号“`”)和第二个字符(“;”),但不适用于第三个字符(“[”)......关于为什么的任何想法?

【问题讨论】:

  • 由于不是字符串,直接转义右括号/[`;[\]&amp;&lt;&gt;?:()|]+/ 字符类解析的规则有点不同,元字符除了]之外都是字面量。

标签: regex groovy


【解决方案1】:

您正在双重转义大括号:

试试:

import java.util.regex.Matcher;

String input = "["
Matcher matcher = input =~ /[`\/;\[\]&<>?:\()|-]+/
if(matcher.matches()) {
    println "Matched!"
} else {
    println "No match!"
}

请注意 [ 和 ] 字符只有一个转义符。当我运行它时,这导致了匹配。

【讨论】:

  • 请注意,( 在字符类中根本不需要转义。
  • 谢谢@cjstehno (+1) - 你能看看我的编辑,知道为什么你的正则表达式在那里不起作用吗?谢谢!
  • 您的其他问题的答案解决了这个问题。 stackoverflow.com/a/37149584/1073826
猜你喜欢
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-03
  • 1970-01-01
相关资源
最近更新 更多