2010-08-12 61 views
2

我试图匹配文件的用户名。这有点像这样:RegexKitLite与方括号不匹配

用户名= asd123 password123

等。

我使用正则表达式:

username=(.*) password 

来获取用户名。但是,如果用户名称和[ers]或类似名称不匹配,则不匹配。它不会匹配括号。任何解决方案?

+0

你是否逃过''[? – 2010-08-12 00:13:41

+0

如果我不知道他们会来,我怎么能逃脱他们?用户输入的用户名,所以我不知道他们事先。 – Accatyyc 2010-08-12 00:20:36

回答

1

我可能会使用正则表达式:

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

或类似的东西。关于此的注意事项:

  • 转义括号可以确保您获得文字括号。
  • a-zA-Z0-9跨度匹配字母数字字符(根据您的示例,这是alphanumerc)。所以这将匹配任何字母数字字符或括号。
  • +修饰符可确保您匹配至少有一个字符*Kleene star)将允许重复,这意味着您将接受一个空字符串作为有效的用户名。
  • 我不知道RegexKitLite是否允许POSIX类。如果是这样,您可以使用[:alnum:]代替a-zA-Z0-9。尽管如此,我上面给出的那个应该工作。

另外,我会禁止用户名中的括号。他们不是真的需要,IMO。

+0

谢谢,我会研究这一点。这不是由我来决定是否允许括号,这些用户名已经存在多年了,括号总是被允许的,不幸的是:( – Accatyyc 2010-08-12 08:49:21

+0

)如果可能的话,你可能还想发布一些更多的代码。 *)'表达式在这里不匹配,所以我肯定会检查你是如何解析文件并将字符串传递给正则表达式的。这可能是一个问题,当你遇到一个括号时,字符串本身的格式不正确。 – eldarerathis 2010-08-12 13:08:36

1

你的正则表达式是正确的。相反,你可以试试这个:

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

[][[:alpha:]]意味着][[:alpha:]包含在括号内。

+0

否.. []是一个空字符类。 – jtbandes 2010-08-12 01:20:41

+1

这个方法在''['在我的例子中被认为是一个普通字符后'']'不是一个错误......所以''[]'不被解释为'[]',它不是空字符类在我的正则表达式中。你可以阅读更多信息:http://en.wikibooks.org/wiki/Regular_Expressions/Regular_Expression_Syntaxes – 2010-08-12 02:05:02