Trato de averiguar cómo obtener 2 coincidencias de String Bla bla bla [https://google.com|Google] bla bla bla [https://youtube.com|Youtube]
Quiero obtener 2 coincidencias: [https://google.com|Google], [https://youtube.com|Youtube] . Mi expresión regular se ve así: \[.*\|.*\] y con ella solo obtengo una coincidencia: [https://google.com|Google] bla bla bla [https://youtube.com|Youtube] por lo que es una respuesta incorrecta. ¿Cómo obtener la respuesta correcta?
PS google y youtube: el ejemplo codificado. Obtengo una matriz de datos con más de 1000 entradas, por lo que necesito una solución universal.
Puedes usar
\[([^\]\[|]*)\|([^\]\[]*)]Vea la demostración de expresiones regulares . Detalles:
\[ - un [ carácter([^\]\[|]*) - Grupo 1: cualquier cero o más caracteres que no sean [ , ] y |\| - un | carbonizarse([^\]\[]*) - Grupo 2: cualquier cero o más caracteres que no sean [ y ]] - un ] carácter.En Java, utilice
String regex = "\\[([^\\]\\[|]*)\\|([^\\]\\[]*)]";Vea la demostración de 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)); }Producción:
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¿Necesitas hacer que el cuantificador * sea perezoso agregando ? marca, aquí hay un ejemplo:
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()); }PRODUCCIÓN :
[https://google.com|Google] [https://youtube.com|Youtube]