java正则表达式多模式顺序匹配

时间:2012-08-29 16:15:56

标签: java regex loops pattern-matching

我有一个特定的问题,我在网上找不到任何答案。基本上,我想对具有多个模式的文本运行模式匹配操作。但是,我不希望匹配器一次性获得结果,而是在循环的不同阶段调用每个模式,同时在每个阶段执行特定操作。例如,想象我有Pattern1Pattern2Pattern3,我想要像:

 if (Pattern 1 = true) {
        delete Pattern1;
    } else if (Pattern 2 = true) {
        delete Pattern2;
    } else if (Pattern 3 = true) {
        replace with 'something;
    } .....and so on

(这只是循环的一个例子,所以可能语法不正确,)

我的问题是:如何在分别调用它们的同时编译不同的模式? (我只看到多个模式一起编译并在AND / OR的帮助下一起搜索等等。不幸的是,这不是我正在寻找的东西)我可以将模式保存在一个数组中并在我的数组中调用它们环?

2 个答案:

答案 0 :(得分:2)

准备Pattern个对象pattern1, pattern2, pattern3并将它们存储在任何容器(数组或列表)中。然后在每次迭代时使用usePattern(Pattern newPattern)对象的Matcher方法遍历此容器。

答案 1 :(得分:1)

您可以创建一个通用界面,并使用模式或其他任何您想要转换字符串的匿名实现:

interface StringProcessor {
    String process(String source);
}

StringProcessor[] processors = new StringProcessor[] {
    new StringProcessor() {
        private final Pattern p = Pattern.compile("[0-9]+");
        public String process(String source) {
            String res = source;
            if (p.matcher(source).find()) {
                res = ... // delete
            }
            return res;
        }
    }
,   new StringProcessor() {
        private final Pattern p = Pattern.compile("[a-z]+");
        public String process(String source) {
            String res = source;
            if (p.matcher(source).find()) {
                res = ... // replace
            }
            return res;
        }
    }
,   new StringProcessor() {
        private final Pattern p = Pattern.compile("[%^#@]{2,5}");
        public String process(String source) {
            String res = source;
            if (p.matcher(source).find()) {
                res = ... // do whatever else
            }
            return res;
        }
    }
};

String res = "My starting string 123 and more 456";
for (StringProcessor p : processors) {
    res = p.process(res);
}

请注意,StringProcessor.process的实现根本不需要使用正则表达式。底部的循环不知道regexp参与获得结果。