#java #regex
#java #регулярное выражение
Вопрос:
Я пытаюсь выяснить, как получить 2 совпадения из строки Bla bla bla [https://google.com|Google] bla bla bla [https://youtube.com|Youtube]
Я хочу получить 2 совпадения : [https://google.com|Google], [https://youtube.com|Youtube]
. Мое регулярное выражение выглядит следующим образом: [.*|.*]
и с ним я получаю только одно совпадение: [https://google.com|Google] bla bla bla [https://youtube.com|Youtube]
так что это неправильный ответ. Как получить правильный ответ?
PS google и youtube — жестко закодированный пример. Я получаю массив данных с более чем 1000 записями, поэтому мне нужно универсальное решение.
Комментарии:
1.
.*
является жадным. Сделайте это неохотно, добавив?
like.*?
.
Ответ №1:
Вы можете использовать
[([^][|]*)|([^][]*)]
Посмотрите демонстрацию регулярных выражений. Подробные сведения:
[
—[
символ([^][|]*)
— Группа 1: любые нулевые или более символов, кроме[
,]
и|
|
—|
символ([^][]*)
— Группа 2: любые нулевые или более символов, кроме[
и]
]
—]
символ.
В Java используйте
String regex = "\[([^\]\[|]*)\|([^\]\[]*)]";
Посмотрите демонстрацию Java:
String s = "Bla bla bla [https://google.com|Google] bla bla bla [https://youtube.com|Youtube]";
String regex = "\[([^\]\[|]*)\|([^\]\[]*)]";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
System.out.println("Match: " matcher.group(0));
System.out.println("Group 1: " matcher.group(1));
System.out.println("Group 2: " matcher.group(2));
}
Вывод:
Match: [https://google.com|Google]
Group 1: https://google.com
Group 2: Google
Match: [https://youtube.com|Youtube]
Group 1: https://youtube.com
Group 2: Youtube
Комментарии:
1. Спасибо за ваш ответ! Но также было необходимо добавить https в первую группу захвата
2. @MikhailGulyaev Миша,
https
присутствует в совпадениях. Если вы имеете в виду, что это должно быть частью шаблона, просто добавьте его,[(https[^][|]*)|([^][]*)]
Ответ №2:
вам нужно сделать квантификатор * ленивым, добавив?отметьте, вот пример :
String s = "Bla bla bla [https://google.com|Google] bla bla bla [https://youtube.com|Youtube]";
Pattern p = Pattern.compile("\[.*?\]");
Matcher matcher = p.matcher(s);
while(matcher.find()){
System.out.println(matcher.group());
}
ВЫВОД :
[https://google.com|Google]
[https://youtube.com|Youtube]