Java 正则表达式多重匹配和模式

问题描述 投票:0回答:2

我想将正则表达式添加到我的一个项目中,它允许多种模式和匹配器。

我目前有一个存储类型的枚举......

public enum Types {

   OAK_DOOR,
   BIRCH_DOOR,
   BAMBOO_DOOR,
   CAKE,
   RANDOM,
   WHITE_BED,
   RED_BED,
   PINK_BED,
   BLACK_BED;

}

这是我当前的代码:

    public Set<String> getTypes() {
        Set<String> foundTypes = Sets.newHashSet();
        List<String> regexPatterns = Lists.newArrayList("^.*?_BED", "^.*?_DOOR");

        for (String regexPattern : regexPatterns) {
            Pattern pattern = Pattern.compile(regexPattern);

            for (Types type : Types.values()) {
                String name = type.name();
                Matcher m = pattern.matcher(name);

                while (m.find()) {
                     foundTypes.add(m.group());
                }
            }
        }

        return foundTypes;
    }

这不会从 Types 枚举中返回任何值。

我做错了什么?

感谢您的宝贵时间。

java regex design-patterns
2个回答
0
投票

如果您想匹配 DOOR

BED
中的
ending
类型,则只需使用单个正则表达式模式:

(?:DOOR|BED)$

更新了 Java 代码:

public Set<String> getTypes() {
    Set<String> foundTypes = Sets.newHashSet();
    String regexPattern = "(?:DOOR|BED)$";
    Pattern pattern = Pattern.compile(regexPattern);

    for (Types type : Types.values()) {
        String name = type.name();
        Matcher m = pattern.matcher(name);

        if (m.find()) {
             foundTypes.add(m.group());
        }
    }

    return foundTypes;
}

0
投票

在您的代码中,您的代码 regexPatterns 列表未正确启动。

以下更改顺利进行:

List<String> regexPatterns = new ArrayList<>(Arrays.asList("^.*?_BED", "^.*?_DOOR"));
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.