Comment faire correspondre le premier mot après une expression avec regex?
Par exemple, dans ce texte:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc de l'ue tellus nunc vel pretium lacinia. Proin sed lorem. Les agences de notation sed ipsum. Nunc d'un libero quis vous demande imperdiet.
Je veux correspondre le mot après "ipsum'.
source d'informationauteur Matthew Taylor
Vous devez vous connecter pour publier un commentaire.
Cela ressemble à un travail pour lookbehinds, mais vous devriez être au courant que tous les regex saveurs de soutien. Dans votre exemple:
Cela correspond à toute séquence de lettres qui suit: "ipsum" comme un mot entier suivi d'un espace. Il ne pas match "ipsum", vous n'avez pas besoin de vous soucier de le réinsérer dans le cas de, par exemple, les remplacements.
Comme je l'ai dit, cependant, certains arômes (JavaScript, par exemple) ne prennent pas en charge lookbehind à tous. Beaucoup d'autres (la plupart, en fait) prennent uniquement en charge "largeur fixe" lookbehinds — de sorte que vous pourriez utiliser cet exemple, mais pas tout de la répétition des opérateurs. (En d'autres termes,
(?<=\b\w+\s+)(\w+)
ne serait pas travail.)Certains des autres intervenants ont suggéré d'utiliser une regex qui ne dépend pas de lookbehinds, mais je pense que complète, exemple de travail est nécessaire pour obtenir le point à travers. L'idée est que vous correspondre à l'ensemble de la séquence ("ipsum" plus le mot suivant) de la manière habituelle, puis utiliser une capture d'un groupe d'isoler la partie qui vous intéresse. Par exemple:
Noter que cela s'imprime à la fois "dolor" et "Nunc". De le faire avec le lookbehind version, vous devez faire quelque chose hackish comme:
C'est en Java, ce qui nécessite la lookbehind d'avoir un évident longueur maximale. Certaines saveurs n'ont pas même que beaucoup de flexibilité, et bien sûr, certains ne supportent pas lookbehinds à tous.
Cependant, le plus gros problème que les gens semblent avoir en leur exemple n'est pas avec lookbehinds, mais avec des limites des mots. Les deux David Kemp et ck semblent attendre
\b
pour correspondre à l'espace, à la suite de la "m", mais il n'en est rien; elle correspond à la position (ou limite) entre le 'm' et l'espace.C'est une erreur commune, je l'ai même vu répétée dans quelques livres et des tutoriels, mais la limite de mot de construire,
\b
ne correspond jamais avec tous les caractères. C'est un zéro-largeur affirmation, comme lookarounds et des ancrages (^
$
\z
etc.), et ce qu'elle correspond à une position qui est précédé par un caractère de mot et de ne pas être suivi par l'un, ou suivie par un caractère de mot et de ne pas précédé par un.ipsum\b(\w*)
Avec
javascript
vous pouvez utiliser(?=ipsum.*?(\w+))
Cette obtiendrez la deuxième occurrence (Nunc)
ipsum\b(.*)\b
EDIT:
bien que, selon votre expression régulière de la mise en œuvre, cela pourrait être de la faim et de trouver tous les mots après ipsum