Мне хотелось бы получить входную строку String, перебрать каждую подстроку этой строки, которая содержит шаблон, а затем применить к этим подстрокам другой шаблон и каким-то образом заменить эту часть. Это код:Iterate Matcher Regex Java
public static String parseLinkCell1NoLost(String cell) {
String link = cell;
Pattern catPattern = Pattern.compile("\\{\\{(.*?)\\}\\}", Pattern.MULTILINE);
Matcher matcher = catPattern.matcher(cell);
while (matcher.find()) {
Pattern newP = Pattern.compile("\\{\\{nowrap|(.*?)\\}\\}", Pattern.MULTILINE);
Matcher m = newP.matcher(cell);
if (m.matches()) {
String rest = m.group(0);
String prov = m.group(1);
String[] temp = prov.split("\\|");
if (temp == null || temp.length == 0) {
return link;
} else {
link = link.replace(rest, temp[1]);
}
}
}
return link;
}
Проблема заключается в том, что я не могу получить подстроку, которая соответствует каждому matcher.find()
. Так что, если у меня есть вход "{{nowrap|x}} {{nowrap|y}}"
, я хотел бы повторить итерацию два раза и получить подстроку {{nowrap|x}}
в первую очередь, а {{nowrap|y}}
во втором. Спасибо заранее.
N o это нехорошо, я должен применить другой шаблон newP к каждой подстроке. –
Извините, я не понимаю, что вы делаете. Шаблон newP содержит избыточную 'Pattern.MULTILINE' (вы можете удалить ее) и unescaped' | ', который создает чередование *. '\\ {\\ {nowrap | (. *?) \\} \\}' соответствует либо '{{nowrap', либо любым символам 0+, отличным от строк, а затем'}} '. Вы хотели уйти от '' '? Что такое вывод для '' {{nowrap | x}} {{nowrap | y}} "'? –
Хорошо, сначала я проверяю каждую подстроку с помощью {{...}}, а затем внутри проверки другого регулярного выражения, например {{nowrap | ...}} или {{birthday | 16 | 09 | 1991} }, и обрабатывать их правильно. –