2013-08-14 4 views
-4

Que dois-je faire si je veux que le programme regarde si la chaîne a ces caractères. Faisons un exemple: Je veux renoncer à ces personnages: '*',':','&','=',... Et le code que j'utilise est:Perl regex plusieurs caractères

if(!($line =~ /(\*|\:|\&)/)){ 

Mais lorsque je tente de le compiler donne une erreur:

Unknown verb pattern '|a' in regex; marked by <-- HERE in m/(*|,|&|:) <-- HERE/
at busquedas.pl line 10. 

erreur pour ceux qui ne me croient pas;) Merci. enter image description here

+0

Impossible de reproduire cette erreur. Et ça ne va pas avec cette regex, comme mentionné dans l'erreur elle-même. La regex à laquelle elle appartient est à la ligne 10 et commence comme elle dit: '/ (* | a)' – TLP

+3

Vous ne pouvez pas simplement échanger des parties du message d'erreur. Vous devez couper et coller le message d'erreur * exact *, et assurez-vous qu'il appartient à * exactement * la ligne de code que vous affichez. – TLP

+0

Ok, jetez un oeil à la photo @TLP –

Répondre

1

Si vous êtes à la recherche d'un seul caractère, vous pouvez simplement utiliser un character class comme ceci:

if(!($line =~ /[*:&=]/)){ 
+0

il me donne cette erreur: Utilisation inutile de la concaténation (.) Ou chaîne dans le contexte vide à busquedas.pl ligne 12. –

+3

@MarcOrtiz Cela ressemble à l'erreur est sur une ligne différente. –

0

Je ne reçois pas l'erreur. La seule façon de l'obtenir est de suivre immédiatement la parenthèse ouvrante avec un *.

$ perl -we 'if(!($line =~ /(\*|\:|\&)/)){}' 
Name "main::line" used only once: possible typo at -e line 1. 
Use of uninitialized value $line in pattern match (m//) at -e line 1. 
$ perl -we 'if(!($line =~ /(*|\:|\&)/)){}' 
Unknown verb pattern '|\' in regex; marked by <-- HERE in m/(*|\:|\&) <-- HERE/at -e line 1. 

Comment exécutez-vous le code? Avez-vous vraiment collé la ligne qui produit l'erreur?

splain dit:

Unknown verb pattern '' in regex; marked by <-- HERE in m/(*) <-- HERE/at -e 
    line 1 (#1) 
(F) You either made a typo or have incorrectly put a * quantifier 
after an open brace in your pattern. Check the pattern and review 
perlre for details on legal verb patterns.