2011-07-04 2 views
0

j'ai les suivantes Regex utilisé pour faire correspondre PHP classe, les noms de méthode et de fonction pour les valider, il a été pris à partir du site de PHP (lien ci-dessous)Les modifications apportées à un reg-ex compilation

Le problème est qu'il ne correspondent pas à des classes de caractères simples, par exemple:

class a{} 
class b{} 
class A{} 
class B{} 

L'expression rationnelle est

[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]* 

maintenant je suis pas super à expressions régulières que je choisis de ne pas les utiliser si je peux l'aider, mais à cette occasion, j'ai choisi de les utiliser.

que je dois faire 2 modifications de base à la regex:

  • Allow
  • de caractère ne peut pas commencer par __ (Mais peut commencer par un seul trait de soulignement suivi d'une lettre)

Y at-il un gourou de l'Expression Régulière qui peut m'aider?

Cordialement

+0

"Le problème est qu'il ne correspond pas à des classes de caractères uniques" --- l'expression rationnelle que vous avez publiée ** correspond à ** des classes de caractères uniques. http://ideone.com/m5iYR – zerkms

+0

oooh, mon mauvais, dans mon code j'ai omis le multiplicateur pour une raison inconnue, un de ces moments. Merci ça. – RobertPitt

Répondre

2

Ceci est la réponse possible:

classe unique char:

var_dump(preg_match('~^(_(?!_)|[a-zA-Z\x7f-\xff])[a-zA-Z0-9_\x7f-\xff]*$~', 'a')); // 1 

classe underscore simple:

var_dump(preg_match('~^(_(?!_)|[a-zA-Z\x7f-\xff])[a-zA-Z0-9_\x7f-\xff]*$~', '_')); // 1 

classe double underscore:

var_dump(preg_match('~^(_(?!_)|[a-zA-Z\x7f-\xff])[a-zA-Z0-9_\x7f-\xff]*$~', '__a')); //0 
+0

Semble fonctionner parfaitement, merci monsieur. – RobertPitt

+0

@zerkms: '~' wat est le but ....... – K6t

+0

@ K6t: juste un délimiteur. Vous pouvez utiliser celui que vous aimez: '!', '#', '/', Etc – zerkms

Questions connexes