【问题标题】:RegexKitLite not matching square bracketsRegexKitLite 不匹配方括号
【发布时间】:2010-08-12 00:11:20
【问题描述】:

我正在尝试匹配文件中的用户名。有点像这样:

用户名=asd123 密码123

等等。

我正在使用正则表达式:

username=(.*) password

获取用户名。但如果用户名是 say and[ers] 或类似名称,则不匹配。它不会匹配括号。有什么解决办法吗?

【问题讨论】:

  • 如果我不知道他们会来,我怎么能逃脱他们?用户名是用户输入的,所以我事先不知道它们是什么。

标签: iphone objective-c regex regexkitlite


【解决方案1】:

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

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

或类似的东西。关于此的注释:

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

或者,我不允许在用户名中使用括号。它们并不是真正需要的,IMO。

【讨论】:

  • 谢谢,我会调查的。而且我不能禁止使用括号,这些用户名已经存在多年,并且一直允许使用括号,不幸的是:(
  • 如果可能的话,您可能还想发布更多代码。 (.*) 表达式在这里不匹配似乎确实不寻常,所以我肯定会检查您如何解析文件并将字符串传递到正则表达式。遇到括号时,可能是字符串本身格式错误的问题。
【解决方案2】:

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

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

[][[:alpha:]]表示][[:alpha:]包含在括号内。

【讨论】:

  • No.. [] 是一个空字符类。
  • 这种方法不是错误... ] 在我的示例中[ 被称为常规字符... 所以[] 不被解释为[] 它是不是我的正则表达式中的空字符类。你可以阅读更多信息:en.wikibooks.org/wiki/Regular_Expressions/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多