【发布时间】:2016-04-13 08:58:58
【问题描述】:
我遇到了一些 Java 模式问题。这是我的模式:
"^[\\p{L}\\p{Digit}~._-]+$"
它匹配任何 US-ASCII 字母、数字、一些特殊字符,基本上是任何不会打乱 URL 的东西。
我想要的是找到与此模式不匹配的单词中的第一个字母。基本上用户发送一个文本作为输入,如果我发现一个非法字符,我必须验证它并抛出异常。
我尝试否定这种模式,但它无法正确编译。 find() 也帮不上什么忙。
合法的输入应该是hello,而?hello 不应该是,我的例外应该指出? 不正确。
我更喜欢使用 Java 的 Matcher、Pattern 或使用 util.regex 的东西的建议。这不是必需的,但单独检查字符串中的每个字符并不是解决方案。
编辑:我想出了一个更好的正则表达式来匹配未保留的 URI 字符
【问题讨论】:
-
!"?hello".subString(0,1).matches("^[\\p{L}\\p{Digit}.'-.'_]+$")? -
你能分享一些你想要做什么的代码吗?试图清理 GET/POST 参数?还是整个网址?
-
为什么在单个字符类中使用 2
'和.?此外,'-.创建了一个范围(并匹配'()*+,-.),这是故意的吗?顺便说一句,试试if (str.matches("[^\\p{L}\\p{Digit}.'_-].*")) { /* Error! */ } -
感谢 Wiktor 的观察