Je ne connais pas Regex pour la première fois, je suis passé par une série de tutoriels, mais je n’en ai trouvé aucun qui corresponde à ce que je veux faire.
Je veux chercher quelque chose, mais je retourne tout ce qui suit, mais pas la chaîne de recherche elle-même
par exemple. " Une phrase boiteuse qui est géniale "
rechercher " phrase "
retourne " c'est génial "
Toute aide serait très appréciée
Ceci est mon regex jusqu'à présent
sentence(.*)
mais cela retourne: phrase géniale
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");
}
Vous pouvez le faire avec "uniquement l'expression régulière" comme vous l'avez demandé dans un commentaire:
(?<=sentence).*
(?<=sentence)
est un assertion de regard positif . Cela correspond à une certaine position de la chaîne, à savoir juste après le texte sentence
sans que ce texte fasse lui-même partie de la correspondance. Par conséquent, (?<=sentence).*
correspondra à tout texte après sentence
.
C'est une fonctionnalité intéressante de regex. Cependant, dans Java, cela ne fonctionnera que pour les sous-expressions de longueur finie, c'est-à-dire, e. (?<=sentence|Word|(foo){1,4})
est légal, mais (?<=sentence\s*)
n'est pas.
Votre regex "sentence(.*)"
a raison. Pour récupérer le contenu du groupe entre parenthèses, appelez:
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"
}
Notez l’utilisation de m.find()
dans ce cas (tente de trouver n’importe où dans la chaîne) et non pas m.matches()
(échouerait à cause du préfixe "un peu boiteux"; dans ce cas, la regex doit être ".*sentence(.*)"
)
si Matcher est initialisé avec str
, après le match, vous pouvez obtenir la partie après le match avec
str.substring(matcher.end())
Exemple de code:
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());
}
Sortie:
c'est génial
Vous avez juste besoin de mettre "group (1)" au lieu de "group ()" dans la ligne suivante et le retour sera celui que vous attendiez:
System.out.println("I found the text: " + matcher.group(**1**).toString());
Vous devez utiliser le groupe (int) de votre matcher - le groupe (0) est l’ensemble du match et le groupe (1) est le premier groupe marqué. Dans l'exemple que vous spécifiez, le groupe (1) est ce qui vient après "phrase".