我正在拼命寻找一个正则表达式,它匹配a到z,A到Z,0到9和“ - ”之间的任何东西。如果要检查的字符串等于“admin”,则相同的正则表达式不能匹配。
我试过了:
/^(?!admin)|([-a-z0-9]{1,})$/i
但它不起作用,即使我添加了负面的前瞻功能,它也匹配字符串admin。
我正在使用这个正则表达式与PHP(PCRE)。
答案 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等正则表达式测试工具