点语言标识符的正则表达式
regex for dot language identifier
The dot language 有一些标识符规则。我想制作一个符合 groovy 中第一个的正则表达式。规则是
不以数字开头的任何字母 ([a-zA-Z0-7]
) 字符、下划线 ('_
') 或数字 ([0-9]
) 字符串;
我想做这样的事情
[_a-zA-Z0-7][_0-9a-zA-Z0-7]*
但是 groovy 抱怨 0-7。如何使此正则表达式 groovy 兼容?
编辑:一些附加代码
String getId(String id) {
if(id ==~ /[_a-zA-Z0-7][_0-9a-zA-Z0-7]*/) {
return id
} else {
return "\"$id\""
}
}
和错误
Illegal/unsupported escape sequence near index 9
[_a-zA-Z0-7][_0-9a-zA-Z0-7]*
编辑 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"'
}
以下适用于 Groovy 2.4.9:
def regex = "[_a-zA-Z0-7][_0-9a-zA-Z0-7]*"
assert '_aB' ==~ regex
assert '_123AB' ==~ regex
assert 246 == (('ö' as char) as int)
assert 252 == (('ü' as char) as int)
assert '_aMötleyCrüe123' ==~ regex
The dot language 有一些标识符规则。我想制作一个符合 groovy 中第一个的正则表达式。规则是
不以数字开头的任何字母 ([a-zA-Z0-7]
) 字符、下划线 ('_
') 或数字 ([0-9]
) 字符串;
我想做这样的事情
[_a-zA-Z0-7][_0-9a-zA-Z0-7]*
但是 groovy 抱怨 0-7。如何使此正则表达式 groovy 兼容?
编辑:一些附加代码
String getId(String id) {
if(id ==~ /[_a-zA-Z0-7][_0-9a-zA-Z0-7]*/) {
return id
} else {
return "\"$id\""
}
}
和错误
Illegal/unsupported escape sequence near index 9
[_a-zA-Z0-7][_0-9a-zA-Z0-7]*
编辑 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"'
}
以下适用于 Groovy 2.4.9:
def regex = "[_a-zA-Z0-7][_0-9a-zA-Z0-7]*"
assert '_aB' ==~ regex
assert '_123AB' ==~ regex
assert 246 == (('ö' as char) as int)
assert 252 == (('ü' as char) as int)
assert '_aMötleyCrüe123' ==~ regex