Obtendo o texto que segue após a correspondência de regex

Eu sou novo em usar o Regex, eu tenho passado por uma série de tutoriais, mas eu não encontrei um que se aplica ao que eu quero fazer,

Eu quero procurar por algo, mas retornar tudo que está seguindo, mas não a própria string de pesquisa

Por exemplo, ” Alguma frase que é incrível

procurar por ” sentença

retorno ” que é incrível

Qualquer ajuda seria muito apreciada

Esta é a minha regex até agora

sentence(.*) 

mas retorna: frase que é incrível

 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"); } 

Você pode fazer isso com “apenas a expressão regular” como você pediu em um comentário:

 (?<=sentence).* 

(?<=sentence) é uma asserção lookbehind positiva . Isso corresponde a uma determinada posição na string, ou seja, em uma posição logo após a sentence texto, sem fazer com que o próprio texto faça parte da correspondência. Conseqüentemente, (?<=sentence).* Corresponderá a qualquer texto após sentence .

Este é um bom recurso do regex. No entanto, em Java isso só funcionará para subexpressões de comprimento finito, ie (?<=sentence|word|(foo){1,4}) é legal, mas (?<=sentence\s*) não é.

Seu regex "sentence(.*)" Está certo. Para recuperar o conteúdo do grupo entre parênteses, você chamaria:

 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" } 

Observe o uso de m.find() nesse caso (tentativas de localizar em qualquer lugar da string) e não m.matches() (falharia devido ao prefixo “some lame”; nesse caso, o regex precisaria ser ".*sentence(.*)" )

Se o Matcher for inicializado com str , após o jogo, você poderá obter a parte após o jogo com

 str.substring(matcher.end()) 

Código de amostra:

 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()); } 

Saída:

isso é incrível

Você precisa usar o grupo (int) do seu matcher – group (0) é a correspondência inteira, e group (1) é o primeiro grupo que você marcou. No exemplo que você especificar, group (1) é o que vem depois de ” sentença “.

Você só precisa colocar “group (1)” em vez de “group ()” na linha seguinte e o retorno será o esperado:

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