2010-09-28 9 views
-1

Je veux correspondreComment rendre une expression Perl d'expression régulière facultative?

my @array = ('Tree' , 'JoeTree','Joe'); 

    foreach (@array) { 
     if ($_ =~ /^(Joe)[^Tree]/gi) { 
     print "matched $_"; 
     } 
    } 

Il ne correspondant à Joe. il ne devrait pas correspondre à autre chose

+4

Vous devez expliquer exactement ce que vous faites et ne voulez pas que votre expression rationnelle. Ce que vous essayez d'accomplir n'est pas clair. – cjm

+3

Tree, vous avez posé beaucoup de questions mal formulées ces derniers temps, et il est difficile de vous aider: s'il vous plaît lire [Jon Skeet's guide to Writing the Perfect Question] (http://tinyurl.com/so-hints) . Je vous remercie! – Ether

Répondre

2

Faire correspondre uniquement 'Joe' comme le texte entier?

/^(Joe)$/ 

ou de faire correspondre Joe comme seul mot?

/\b(Joe)\b/ 

ou de 'Joe' non suivi de 'Tree'?

/^(Joe)(?!Tree)/ 
+0

après que j'ai quelques chaînes – Tree

+1

pas suivie par serait '(?!' – ysth

6

Vous ne avez pas besoin d'expressions régulières pour cela:

if ($_ eq 'Joe') { 
    print "matched $_"; 
} 
Questions connexes