java正则表达式多模式顺序匹配
我有一个具体的问题,我在网上找不到任何答案。基本上,我希望对文本运行模式匹配操作,使用多个模式。但是,我不希望matcher一次就得到结果,而是希望在循环的不同阶段调用每个模式,同时在每个阶段上执行特定的操作。例如,想象我有java正则表达式多模式顺序匹配,java,regex,loops,pattern-matching,Java,Regex,Loops,Pattern Matching,我有一个具体的问题,我在网上找不到任何答案。基本上,我希望对文本运行模式匹配操作,使用多个模式。但是,我不希望matcher一次就得到结果,而是希望在循环的不同阶段调用每个模式,同时在每个阶段上执行特定的操作。例如,想象我有Pattern1,Pattern2,和Pattern3,我想要如下的东西: if (Pattern 1 = true) { delete Pattern1; } else if (Pattern 2 = true) { delete
Pattern1
,Pattern2
,和Pattern3
,我想要如下的东西:
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等的帮助下一起编译和搜索..不幸的是,这不是我要寻找的)我可以将模式保存在数组中并在循环中调用每个模式吗 准备您的
模式
对象pattern1、pattern2、pattern3
并将它们存储在任何容器(数组或列表)中。然后在每次迭代中使用usePattern(Pattern newPattern)
Matcher对象的方法在该容器上循环。您可以创建一个公共接口,并使用模式或任何其他您可能想要转换字符串的方法进行匿名实现:
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参与了结果的获取。我不太确定我是否看到了这个问题。上面的要点实际上是伪代码。我还没有决定使用哪个循环,这就是为什么它现在看起来如此抽象的原因,但我会尝试一下。如果我需要编译模式(我确定我需要),我需要一个接一个地编译它们,还是可以使用容器来完成?顺便说一下,谢谢你!你想什么时候都行。在我前面的注释“Prepare”==“Get compiled Pattern object”。在我的一些项目中,我使用带有“静态”和上下文依赖模式的列表。因此,首先我编译了“静态”模式并将它们添加到列表中,然后根据需要添加动态形成的模式。我还应该提到边界匹配器\G(“上一次匹配的结束”)。当您对不同的模式依次使用match()
时,它非常有用。