Certains des autres intervenants ont suggéré d'utiliser une expression rationnelle qui ne dépend pas d'assertions arrières, mais 1 penser un exemple de travail complet, est nécessaire pour obtenir le point à travers. L'idée est que vous correspondez toute la séquence (« recherche », plus le mot suivant) de la manière habituelle, puis utiliser un groupe de capture pour isoler la partie qui vous intéresse. Par exemple,
String s = "Lorem ipsum dolor sit amet, consectetur " +
"adipiscing elit. Nunc eu tellus vel nunc pretium " +
"lacinia. Proin sed lorem. Cras sed ipsum. Nunc " +
"a libero quis risus sollicitudin imperdiet.";
Pattern p = Pattern.compile("ipsum\\W+(\\w+)");
Matcher m = p.matcher(s);
while (m.find())
{
System.out.println(m.group(1));
}
Notez que cette affiche à la fois « intelligent » et « maintenant ». Pour ce faire avec la version lookbehind, vous devez faire quelque chose comme hackish:
Pattern p = Pattern.compile("(?<=ipsum\\W{1,2})(\\w+)");
C'est Java, ce qui nécessite la lookbehind ont une longueur maximale évidente. Certaines saveurs n'ont même qu'une grande flexibilité, et bien sûr, certains ne supportent pas du tout d'assertions arrières.
Cependant, le plus grand problème des gens semblent avoir dans leurs exemples ne sont pas avec assertions arrières, mais avec des limites de mots. Les deux David Kemp et CK semblent attendre \b
pour correspondre au caractère de l'espace suivant le « M », mais il n'a pas; elle correspond à la position (ou limite) entre le « m » et l'espace.
C'est une erreur commune, on 1've même vu répété dans quelques livres et des tutoriels, mais la construction de limite de mot, \b
ne correspond jamais à des personnages. C'est une assertion de longueur nulle, comme lookarounds et ancres (^
, $
, \z
, etc.), et ce qu'il correspond à une position qui est soit précédée d'un caractère de mot et non suivi d'un ou suivi d'un caractère de mot et non précédé d'un.
me battre aussi :) – annakata
Lookbehinds ont tendance à être assez limité quand il s'agit d'utiliser des caractères génériques cependant. – cletus
Lookbehinds pourrait même ne pas être nécessaire ici. En fonction de ce que «je veux faire correspondre» dans la question, voir la solution de David Kemp. – user55400