2010-08-12 5 views
2

J'essaie de faire correspondre les noms d'utilisateurs à partir d'un fichier. Il est un peu comme ceci:RegexKitLite ne correspond pas aux crochets

nom d'utilisateur = asd123 password123

et ainsi de suite.

J'utilise l'expression régulière:

username=(.*) password 

Pour obtenir le nom d'utilisateur. Mais cela ne correspond pas si le nom d'utilisateur serait say et [ers] ou similaire. Cela ne correspondra pas aux crochets. Une solution pour cela?

+0

Avez-vous échappé le '['? –

+0

Comment puis-je leur échapper si je ne sais pas qu'ils viennent? Les noms d'utilisateur sont entrés par les utilisateurs, donc je ne sais pas ce qu'ils sont à l'avance. – Accatyyc

Répondre

1

Je probablement utiliser l'expression régulière:

username=([a-zA-Z0-9\[\]]+) password

ou quelque chose de similaire. Remarques à ce sujet:

  • En échappant aux supports, vous obtenez un support littéral.
  • Les plages a-zA-Z0-9 correspondent à des caractères alphanumériques (comme dans votre exemple, qui était alphanumerc). Cela correspond donc à n'importe quel caractère alphanumérique ou parenthèses.
  • Le modificateur + garantit que vous correspondez à au moins un caractère. Le * (Kleene star) permettra zéro répétitions, ce qui signifie que vous accepteriez une chaîne vide comme un nom d'utilisateur valide.
  • Je ne sais pas si RegexKitLite autorise les classes POSIX. Si c'est le cas, vous pouvez utiliser [:alnum:] à la place de a-zA-Z0-9. Celui que j'ai donné plus haut devrait fonctionner si ce n'est pas le cas.

Sinon, je ne voudrais pas autoriser les crochets dans les noms d'utilisateur. Ils ne sont pas vraiment nécessaires, IMO.

+0

Merci, je vais regarder dans cela. Et ce n'est pas à moi de refuser les parenthèses, ces noms d'utilisateurs existent depuis des années et les parenthèses ont toujours été permises, malheureusement :( – Accatyyc

+0

Vous pourriez aussi vouloir poster un peu plus de code, si possible. *) 'expression ne correspond pas ici, donc je vais certainement vérifier comment vous êtes en train d'analyser le fichier et de passer la chaîne dans la regex.Il pourrait s'agir d'un problème de la chaîne elle-même malformée lorsque vous rencontrez un crochet. – eldarerathis

1

Votre expression régulière est correcte. , Vous pouvez plutôt essayer celui-ci:

username=([][[:alpha:]]*) password 

[][[:alpha:]] signifie ] et [ et [:alpha:] sont contenus dans les supports.

+0

Non .. [] est une classe de caractères vide. – jtbandes

+1

Cette approche n'est pas une erreur ... ']' après '[est connu comme un caractère normal dans mon exemple ... Donc' [] 'n'est pas interprété comme' [] 'et ce n'est pas une classe de caractères vide dans mon expression régulière. vous pouvez lire plus d'informations à: http://en.wikibooks.org/wiki/Regular_Expressions/Regular_Expression_Syntaxes –

Questions connexes