Soy nuevo en el uso de Regex, he pasado por una serie de tutoriales pero no he encontrado uno que se aplique a lo que quiero hacer,
Quiero buscar algo, pero devuelvo todo lo que sigue, pero no la cadena de búsqueda en sí.
p. ej., " Una frase tonta que es increíble "
buscar " frase "
devuelve " eso es genial "
Cualquier ayuda sería muy apreciada.
Esta es mi expresión regular hasta ahora
sentence(.*)
pero devuelve: frase 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");
}

Matcher?System.out.println("I found the text: " + "some lame sentance that is aweomse".substring(end()));Respuestas:
Puede hacer esto con "solo la expresión regular" como solicitó en un comentario:
(?<=sentence)es una afirmación retrospectiva positiva . Esto coincide en una determinada posición en la cadena, es decir, en una posición justo después del textosentencesin que el texto en sí forme parte de la coincidencia. En consecuencia,(?<=sentence).*coincidirá con cualquier texto posteriorsentence.Esta es una característica bastante buena de regex. Sin embargo, en Java esto solo funcionará para subexpresiones de longitud finita,
(?<=sentence|word|(foo){1,4})es decir, es legal, pero(?<=sentence\s*)no lo es.fuente
.*coincide con cualquier texto y luego(?<=...)busca la palabra hacia atrássentence, afirmando en este caso que la coincidencia termina con esa palabra. Si desea detenerse antes de esa palabra, debe mirar hacia adelante :.*(?=sentence)coincidirá con cualquier texto que vaya seguido desentence.Tu expresión regular
"sentence(.*)"es correcta. Para recuperar el contenido del grupo entre paréntesis, 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 lugar de la cadena) y nom.matches()(fallaría debido al prefijo "algo cojo"; en este caso, la expresión regular debería ser".*sentence(.*)")fuente
si Matcher se inicializa con
str, después de la coincidencia, puede obtener la parte después de la coincidencia conCó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:
fuente
matcher.find()se requiere antes de esto, IMO.Debe usar el grupo (int) de su comparador: el grupo (0) es la coincidencia completa y el grupo (1) es el primer grupo que marcó. En el ejemplo que especifica, el grupo (1) es lo que viene después de " oración ".
fuente
Solo necesita 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());fuente