Java Pattern匹配异常:Pattern.matches(regex, value)返回false求助
问题分析与解决方案
嘿,我一眼就看出问题所在啦!你踩了Pattern.matches()方法的一个常见坑——这个方法要求正则表达式必须匹配整个输入字符串,而不是只要字符串里包含符合规则的子串就行。
你的正则和输入的问题
你用的正则[<>:/\\|?*]是一个字符类,它只能匹配单个属于这个集合的字符(比如/、*、?这些)。但你的输入字符串This Should /\Match*?是一整段包含普通字符和特殊字符的文本,整个字符串显然不等于单个特殊字符,所以Pattern.matches()自然返回false。
解决办法
如果你想检查字符串中是否包含至少一个这些特殊字符,需要修改正则表达式,让它能匹配"任意字符(0或多个) + 目标特殊字符 + 任意字符(0或多个)"的结构,也就是在字符类前后加上.*:
// 修改后的正则调用 boolean result = Pattern.matches(".*[<>:/\\\\|?*].*", "This Should /\\Match*?");
这样修改后,正则会匹配任何包含至少一个你指定的特殊字符的字符串,运行结果就会符合你的预期返回true了。
额外补充
如果只是想检查子串匹配,也可以用Pattern.compile()先编译正则,再调用matcher.find()方法,效果是一样的:
Pattern pattern = Pattern.compile("[<>:/\\\\|?*]"); Matcher matcher = pattern.matcher("This Should /\\Match*?"); boolean result = matcher.find(); // 返回true
内容的提问来源于stack exchange,提问作者0x45
相关产品推荐
相关产品推荐

