正则表达式 - 排除名称的单词列表

时间:2011-04-04 15:04:12

标签: java regex list words

我正在尝试制作一个接受此的正则表达式:

  • 仅限a-z,0-9,_字符,最小长度为3
  • admin,static,my和www被拒绝。

对于第一部分,我已经设法用:

^[a-zA-Z0-9\\_]{3,}$

但我不知道如何排除先前列出的词语。

例如,这意味着:

  • 静态(当然)不允许,但
  • statice 是允许的
  • 允许
  • estatic

使用此正则表达式:

^(?!static|my|admin|www).*$

效果不好:它排除了statice(以及未经授权的单词之后的所有内容)。

你知道哪个正则表达式符合我的需要吗?

2 个答案:

答案 0 :(得分:8)

尝试这样的事情:

  

^(?!static$|my$|admin$|www$).*$

这将禁止“静态”,但允许“statice”,“statica”等。通过将每个列入黑名单的单词锚定到字符串的末尾,如果它们独立而没有任何尾随字符,则只会匹配它们。

编辑: codeaddict建议采用更简洁的方式做同样的事情:

  

^(?!(?:static|my|admin|www)$).*$

答案 1 :(得分:3)

我会回答我的问题,为我的问题提供正确的答案(包含两种义务的正则表达式),但我会给出接受安德鲁·哈尔的答案,让我以正确的方式:)

以下是如何:

  • 仅允许a-z,0-9,_ chars,最小长度为3
  • 排除admin,static,my和www

这是正则表达式:

^(?!static$|my$|admin$|www$)[a-z0-9\_]{3,}$

或者,正如Codaddict提到的那样,只有一个结束锚:

^(?!(?:static|my|admin|www)$)[a-z0-9\_]{3,}$

希望将来有所帮助!