当定义的字符串不存在时,匹配的正则正则表达式是什么

时间:2009-05-29 00:39:00

标签: regex

我正在拼命寻找一个正则表达式,它匹配a到z,A到Z,0到9和“ - ”之间的任何东西。如果要检查的字符串等于“admin”,则相同的正则表达式不能匹配。

我试过了:

/^(?!admin)|([-a-z0-9]{1,})$/i

但它不起作用,即使我添加了负面的前瞻功能,它也匹配字符串admin。

我正在使用这个正则表达式与PHP(PCRE)。

4 个答案:

答案 0 :(得分:6)

在单个正则表达式中执行“A而不是B”非常棘手。通常更好(更清晰,更容易)分两部分来做。如果这不是一个选项,那就可以完成。你正处于正确的前瞻性前瞻,但是交替会让你失望。

/^(?!admin$)[-a-zA-Z0-9]+$/

在Perl的扩展语法中,这是:

/
  ^               # beginning of line anchor
  (?!             # start negative lookahead assertion
     admin        #   the literal string 'admin'
     $            #   end of line anchor
  )               # end negative lookahead assertion
  [-a-zA-Z0-9]+   # one or more of a-z, A-Z, 0-9, or '-'
  $               # end of string anchor
/x

答案 1 :(得分:3)

正则表达式是唯一可用的工具吗?做一些像(Perl语法)这样的事情可能更容易:

if ($string ne "admin" && $string =~ /^[-a-z0-9]+$/i) { ...

答案 2 :(得分:1)

我认为如果您删除了“或”(|)运算符,它会起作用。现在你基本上是说,如果它是字母匹配等等。或者不等于admin,所以它总是返回true,因为当它等于admin时,它仍然匹配另一个表达式。

答案 3 :(得分:-1)

^(?![\。] * [AA] [日] [mm]的[II] [NN] [\。] * $)([A-ZA-Z0-9] {1,} $)

尝试在code.google.com上试用regex-freetool等正则表达式测试工具