正则表达式 \w
与字符 [A-Za-z0-9_]
完全匹配,这正是我现在需要的。
我想知道是否有任何简单的方法如何创建相应的Guava的CharMatcher 。
我执行了以下操作(我不喜欢静态导入):
private final static CharMatcher IDENTIFIER_CHAR = CharMatcher.is('_')
.or(CharMatcher.inRange('A', 'Z'))
.or(CharMatcher.inRange('a', 'z'))
.or(CharMatcher.inRange('0', '9'))
.precomputed();
有一些预定义的匹配器,但是类似
private final static CharMatcher IDENTIFIER_CHAR = CharMatcher.ASCII
.and(CharMatcher.JAVA_LETTER_OR_DIGIT)
.or(CharMatcher.is('_'))
.precomputed();
看起来并没有好转。在我们得到 closures 之前使用 forPredicate
也不行。在Java 8中。
这里没有真正的问题,只是对于简单且(我猜)常见的东西来说太冗长了。
还有更好的解决方案吗?也许有人实现了类似 newRegexLikeCharMatcher("[A-Za-z0-9_]")
的东西?
最佳答案
您建议的方法的实现可能是:
public CharMatcher newRegexLikeCharMatcher(String regex) {
final Pattern pattern = Pattern.compile(regex);
return new CharMatcher() {
@Override
public boolean matches(char c) {
return pattern.matcher(Character.toString(c)).find();
}
}.precomputed();
}
或
public CharMatcher newRegexLikeCharMatcher(String regex) {
return CharMatcher.forPredicate(Predicates.compose(Predicates.containsPattern(regex), Functions.toStringFunction()))
.precomputed();
}
关于java - 如何编写正则表达式 "word character"的 CharMatcher 等效项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12378702/