2016-12-14 4 views
1

Dites que la chaîne est 'abc' et que l'expression est (? = A) abc, cela ne serait-il pas la même chose que la simple recherche d'abc? Quand les lookarounds positifs ont-ils pour but de ne pas les utiliser?Quel est le but de l'utilisation de lookarounds positifs sur pas?

+2

Cette anticipation positive est inutile car 'a' est toujours' a'. N'utilisez pas de lookarounds * inutiles. –

+0

Par curiosité, quelle serait l'expression correspondant à 'abc' que si elle est précédée de' a' (comme dans 'aabc')? Je trouve la syntaxe plutôt contre-intuitive ... –

+0

Vous pourriez utiliser un lookbehind positif '(? <= A) abc' [(voici un petit test)] (https://regex101.com/r/y91J1b/1), voici quelques [Documentation] (http://www.regular-expressions.info/lookaround.html) – juanlu

Répondre

2

L'aspect positif fonctionne tout de même. q (? = u) correspond à q suivi de u, sans faire la partie du match. La construction de lookahead positive est une paire de parenthèses, avec la parenthèse ouvrante suivie d'un point d'interrogation et d'un signe égal.

http://www.regular-expressions.info/lookaround.html

Voici un petit exemple de https://ourcraft.wordpress.com/2009/03/25/positive-examples-of-positive-and-negative-lookahead/


que je veux récupérer à partir d'un document texte tous les mots qui sont immédiatement suivies par une virgule. Nous allons utiliser cet exemple chaîne:

What then, said I, shall I do? You shan't, he replied, do anything.

En tant que première tentative, je pourrais utiliser cette expression régulière pour obtenir une ou plusieurs parties de mot suivi d'une virgule:

[A-Za-z']+, 

Cela donne quatre résultats sur la chaîne:

then, 
I, 
shan't, 
replied, 

Notez que cela me donne la virgule aussi, cependant, que je devrais alors supprimer. Ne serait-il pas préférable que nous puissions exprimer que nous voulons faire correspondre un mot suivi d'une virgule sans correspondre à la virgule?

Nous pouvons le faire en modifiant notre regex comme suit:

[A-Za-z']+(?=,) 

Cela correspond à des groupes de caractères de mots qui sont suivies par une virgule, mais à cause de l'utilisation de préanalyse la virgule ne fait pas partie de la correspondance texte (tout comme nous le voulons ne pas être). La regex modifiée résulte en ces correspondances:

then 
I 
shan't 
replied