2010-02-18 8 views
0

Donc, je suis nouveau à regex .... et ce que je ne peux pas donner de sens est-ce ...Parenthèses logiques pour regex ...?

Comment puis-je rechercher une regex spécifique à chaque fois dans une chaîne, à savoir correspondre à toutes les occurrences de ' test 'dans une chaîne donnée .... Que pourrais-je utiliser comme parenthèses logiques?

/(test)*/ 

Ceci renvoie plusieurs correspondances/références arrière et ne semble pas être destiné à un regroupement/à un ordre d'exécution logique.

+0

Je ne comprends pas ce que vous demandez. Pouvez-vous donner un exemple où cela serait utile? – wallyk

+0

Ce n'est pas très clair quel genre de résultat vous voulez. Pouvez-vous poster un exemple de chaîne d'entrée et la sortie désirée? – Juliet

+0

Essayez-vous d'attraper toutes les occurrences du mot 'test' dans une chaîne afin de pouvoir les remplacer par quelque chose d'autre? Pouvez-vous élaborer un peu plus sur votre objectif? –

Répondre

4

Pour arrêter les parenthèses de la création de groupes de match, commencer par les ?:

/(?:test)*/ 

Cela correspond juste « test » plusieurs fois de suite, sans enregistrer partout les sous-chaînes correspondantes.

+0

Laissez-moi poser cette question, y at-il un besoin de (?: ) souvent, dans l'effet d'une parenthèses logiques? – Zombies

+0

Il est à noter que cette construction est spécifique à Perl (et aux systèmes liés à PCRE, qui peuvent être la plupart des langages). Ne fonctionne pas dans grep, awk et d'autres environnements d'expression régulière de type POSIX. –

1

Votre expression régulière spécifie uniquement les occurrences de test contiguës. Pour tous, vous avez généralement besoin d'un drapeau pour indiquer que vous ne devez pas correspondre à chaque occurrence, pas seulement la première. Dans la plupart des langues, cela est indiqué en utilisant le drapeau 'g'.

/test/g 
+0

Je suis si nouveau à cela, merci .... aussi, sachant que c'est la moitié de la bataille. – Zombies

Questions connexes