正则表达式初始化问题

时间:2011-03-07 22:30:24

标签: java regex eclipse

我正在使用一些遗留代码,我正在尝试将新的正则表达式添加到验证器的枚举器中,我们的目的标记为“URL”。据我了解,枚举器的每个部分都可以调用一个单独的正则表达式。无论如何,这是我得到的(其他人跟随,因此尾随逗号):

URL("[a-zA-Z0-9\r#;?-\'.:,!/\\s]{1,250}", "Up to 250 letters (upper and lower case), numbers, #, ;, ?, -, ', ., :, comma, !, /, blankspace and carriage return"),

我做了一个简单的JUnit测试,看看它是否正常工作。事实并非如此。

Caused by: java.util.regex.PatternSyntaxException: Illegal character range near index 15
[a-zA-Z0-9
#;?-'.:,!/\s]{1,250}
               ^

我正在尝试将URL类型的输入限制在1到250个字符之间,这是我认为我正在做的事情,但是Eclipse似乎对这个逗号有所冒犯(我假设逗号是索引15)。我做错了什么?

1 个答案:

答案 0 :(得分:8)

问题可能在这里:

?-'

这被解释为从字符?到字符'的范围,这是无效的,因为?具有代码点63,而'具有代码点39.范围应从低到高。但你可能不打算在这里有一个范围。我想你的意思是字面连字符。

要修复错误,请尝试转义连字符:

?\\-'

错误消息指示符位置错误的原因是正则表达式中的\r。如果用另一个字符替换换行符,则指示符与不正确的范围对齐:

[a-zA-Z0-9_#;?-'.:,!/\s]{1,250}
               ^

您也可以使用\\r代替\r,以便正确打印错误消息。