我有一个特定的问题,我在网上找不到任何答案。基本上,我想对具有多个模式的文本运行模式匹配操作。但是,我不希望匹配器一次性获得结果,而是在循环的不同阶段调用每个模式,同时在每个阶段执行特定操作。例如,想象我有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的帮助下一起搜索等等。不幸的是,这不是我正在寻找的东西)我可以将模式保存在一个数组中并在我的数组中调用它们环?
答案 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参与获得结果。