【发布时间】:2016-04-14 09:32:35
【问题描述】:
我在构建允许所有 UTF-8 字符范围的正则表达式时遇到问题,但 2 个字符除外:'_' 和 '?'
所以白名单是:^[\u0000-\uFFFF] 黑名单是:^[^_%]
我需要将这些组合成一个表达式。
我尝试了以下代码,但没有按照我希望的方式工作:
String input = "this";
Pattern p = Pattern
.compile("^[\u0000-\uFFFF]+$ | ^[^_%]");
Matcher m = p.matcher(input);
boolean result = m.matches();
System.out.println(result);
输入:这个
实际输出:假
期望的输出:真
【问题讨论】:
-
更新代码,有效输入返回false
-
您应该提供输入和所需输出的示例。
-
从这个文档:docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html,你可以试试这个:[a-z&&[^m-p]] a 到 z,而不是 m 到 p:[a-lq-z](减法) .一个完整的字符范围,除了其他范围。
-
你可以试试这个-
Pattern p = Pattern.compile("(?!.*[_%])[\u0000-\uFFFF]+"); -
感谢 Jose Luis,我需要嵌套表达式。