sheet online matches cheat java regex

online - regex java 8



Obteniendo el texto que sigue después de que coincida la expresión regular (5)

Soy nuevo en el uso de Regex, he estado realizando una serie de tutoriales pero no he encontrado uno que se aplique a lo que quiero hacer,

Quiero buscar algo, pero devolver todo lo que sigue pero no la cadena de búsqueda en sí

por ejemplo, " alguna frase cojo que es impresionante "

búsqueda de " oración "

regresa " eso es impresionante "

Cualquier ayuda sería muy apreciada.

Este es mi regex hasta ahora

sentence(.*)

pero vuelve: oración que es impresionante

Pattern pattern = Pattern.compile("sentence(.*)"); Matcher matcher = pattern.matcher("some lame sentence that is awesome"); boolean found = false; while (matcher.find()) { System.out.println("I found the text: " + matcher.group().toString()); found = true; } if (!found) { System.out.println("I didn''t find the text"); }


Debe usar el grupo (int) de su emparejador - group (0) es la coincidencia completa, y group (1) es el primer grupo que marcó. En el ejemplo que especifique, el grupo (1) es lo que viene después de " frase ".


Puedes hacer esto con "solo la expresión regular" como pediste en un comentario:

(?<=sentence).*

(?<=sentence) es una afirmación positiva detrás de la afirmación . Esto coincide en una cierta posición en la cadena, es decir, en una posición justo después de la sentence del texto sin hacer que ese texto sea parte de la coincidencia. En consecuencia, (?<=sentence).* Coincidirá con cualquier texto después de la sentence .

Esta es una buena característica de la expresión regular. Sin embargo, en Java esto solo funcionará para subexpresiones de longitud finita, es decir, (?<=sentence|word|(foo){1,4}) es legal, pero (?<=sentence/s*) no lo es.


Si Matcher se inicializa con str , después del partido, puede obtener la parte después del partido con

str.substring(matcher.end())

Código de muestra:

final String str = "Some lame sentence that is awesome"; final Matcher matcher = Pattern.compile("sentence").matcher(str); if(matcher.find()){ System.out.println(str.substring(matcher.end()).trim()); }

Salida:

eso es impresionante


Solo debe poner "grupo (1)" en lugar de "grupo ()" en la siguiente línea y la devolución será la que esperaba:

System.out.println("I found the text: " + matcher.group(**1**).toString());


Su "sentence(.*)" expresión regular "sentence(.*)" Es correcta. Para recuperar el contenido del grupo entre paréntesis, debe llamar a:

Pattern p = Pattern.compile( "sentence(.*)" ); Matcher m = p.matcher( "some lame sentence that is awesome" ); if ( m.find() ) { String s = m.group(1); // " that is awesome" }

Tenga en cuenta el uso de m.find() en este caso (intenta encontrar en cualquier parte de la cadena) y no de m.matches() (fallaría debido al prefijo "algo cojo"; en este caso, la expresión regular debería ser ".*sentence(.*)" )