欺骗的正则表达式

时间:2018-04-10 14:31:27

标签: regex

我想在欺骗时请求帮助说出用户名,我想用正则表达式来捕获它们。

例如正确的用户名是:

rolf

以下是我能想到的欺骗版本:

roooolf
r123olf
123rolf123
rolf5623
123rolf
rollllf
rrrrrrolf
rolffff

所以基本上我有这个正则表达式(我知道这还不够,因为我已经在regex101网站上试过了)

.+(?![rolf]).+

我使用此作为基线,因为它没有捕获正确的用户名:

rolf

但它并没有抓住所有其他的"欺骗"用户名的版本。

任何想法如何才能让我的正则表达式更有效率?

提前致谢!

3 个答案:

答案 0 :(得分:1)

不完全匹配rolf您可以使用否定前瞻(?!断言从字符串开头后面的内容不是'rolf'直到字符串结尾。

^(?!rolf$).+$

匹配

  • ^在字符串开头处断言位置
  • (?!否定前瞻声明后面的内容不是
    • rolf按字面意思匹配
  • )关闭否定前瞻
  • .+匹配任何字符一次或多次
  • $断言字符串末尾的位置

从您的示例正则表达式中,您匹配.+,其中@Ωmega 有一个公平点,匹配空格。

您可以指定.+可以接受的字符,例如匹配一个或多个字词或使用character class指定更多字符,而不是\w+

答案 1 :(得分:1)

您也可以尝试这个

(?m)^(?![^\n]*?rolf[^\n]*$).*$

Demo

答案 2 :(得分:0)

您可以使用正则表达式

\b(?!rolf\b)\S+\b
  

\b 字边界 - 匹配a之间的字边界位置   单词字符和非单词字符或位置(开头/结尾)   字符串)。

     

(?! 否定前瞻 - 指定无法匹配的群组   在主表达式之后(如果匹配,则结果被丢弃)。

     

\S 不是空格 - 匹配任何非空格的字符   空白字符(空格,制表符,换行符)。

     

+ 量词 - 匹配前面一个或多个令牌。

使用此模式 here

测试您的输入。