java - 如何编写正则表达式 "word character"的 CharMatcher 等效项?

标签 java regex guava

正则表达式 \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/

相关文章:

java - seam EntityHome 操作中的有线组件为 null

java - "System library (added to the boot class path)"在Eclipse中意味着什么?

Javascript正则表达式选择第一个冒号和可选的行尾或第二个冒号之间的文本

java - 如何使用 guava CacheBuilder?

java - 验证文件中分离的 XAdES 签名

Java 作业帮助(通过实例引用访问静态成员)

Java正则表达式问题: Matching Function Body

Java USSD 代码正则表达式模式

java - 存在的方法......不?

java - 使用独立键的 Guava 缓存