【问题标题】:regex for dot language identifier点语言标识符的正则表达式
【发布时间】:2017-11-28 11:21:35
【问题描述】:

The dot language 有一些标识符规则。我想制作一个符合 groovy 中第一个的正则表达式。规则是

任何不以数字开头的字母 ([a-zA-Z\200-\377]) 字符、下划线 ('_') 或数字 ([0-9]) 字符串;

我想做这样的事情

[_a-zA-Z\200-\377][_0-9a-zA-Z\200-\377]*

但是 groovy 抱怨 \200-\377。我怎样才能使这个正则表达式 groovy 兼容?

编辑:一些额外的代码

String getId(String id) {
    if(id ==~ /[_a-zA-Z\200-\377][_0-9a-zA-Z\200-\377]*/) {
        return id
    } else {
        return "\"$id\""
    }
}

还有错误

Illegal/unsupported escape sequence near index 9
[_a-zA-Z\200-\377][_0-9a-zA-Z\200-\377]*

编辑 2:这是 spock 测试

@Unroll('"#id" converts to "#expected"')
def 'ids are converted to dot ids'() {
    expect:
    graphviz.getId(id) == expected

    where:
    id          | expected
    '_'         | '_'
    'a'         | 'a'
    'A'         | 'A'
    'a9'        | 'a9'
    ' '         | '" "'
    '234'       | '"234"'
    'two words' | '"two words"'
}

【问题讨论】:

标签: java regex groovy dot


【解决方案1】:

以下内容适用于 Groovy 2.4.9:

def regex = "[_a-zA-Z\200-\377][_0-9a-zA-Z\200-\377]*"

assert '_aB' ==~ regex
assert '_123AB' ==~ regex

assert 246 == (('ö' as char) as int) 
assert 252 == (('ü' as char) as int) 
assert '_aMötleyCrüe123' ==~ regex

【讨论】:

  • 我用更多信息更新了这个问题。当我从斜线字符串切换到普通字符串时,它起作用了。感谢您的帮助。
猜你喜欢
  • 2011-12-19
  • 2013-10-19
  • 2012-03-01
  • 1970-01-01
  • 2013-11-18
  • 2012-07-27
  • 2013-02-03
  • 2011-01-31
  • 2013-04-27
相关资源
最近更新 更多