我有两个应匹配的正则表达式:
"^[a-z0-9\\!@\\$\\^&\\-\\+%\\=_\\(\\)\\{\\}\\<\\>'\";\\:/\\.,~`\\|\\\\]+$"
和
".*(g[o0]+gle).*"
第一个字符可以接受任何字母数字字符(还有其他一些附加字符)。像helloworld123
。第二个应该拒绝任何包含单词“ google”(以不同形式-例如:gooo0gle
)的字符串。
允许:
hello
helloworld
helloworld123
不允许:
hellogoogle
google
...
我想使用RegularExpression
来匹配此字符串。想过类似的事情:
[RegularExpression("^[a-z0-9\\!@\\$\\^&\\-\\+%\\=_\\(\\)\\{\\}\\<\\>'\";\\:/\\.,~`\\|\\\\]+$|.*(g[o0]+gle).*"]
但是它不起作用,因为第二部分(.*(g[o0]+gle).*
)应该不是。
如何正确处理?
谢谢。
答案 0 :(得分:2)
您可以通过将第二个正则表达式放在 negative look ahead 中来使用它,并将第一个正则表达式用作字符集,并结合使用两者来获得可使用的正则表达式,
^(?!.*g[o0]+gle)[-a-z0-9!@$^&+%=_(){}<>'";:\/.,~`|]+$
在这里,(?!.*g[o0]+gle)
的这种否定前瞻将拒绝包含google
的任何字符串或您的正则表达式支持的任何变体,并且此字符集[-a-z0-9!@$^&+%=_(){}<>'";:\/.,~
|] +`将匹配一个或它允许的更多字符。
此外,在字符集中的大多数特殊字符都不需要转义,因此除/
之外,我大部分都没有转义,并且总是将连字符-
放在最前面字符集中的第一个字符或最后一个字符,否则取决于正则表达式的方言,您可能会看到奇怪的行为。