我想在欺骗时请求帮助说出用户名,我想用正则表达式来捕获它们。
例如正确的用户名是:
rolf
以下是我能想到的欺骗版本:
roooolf
r123olf
123rolf123
rolf5623
123rolf
rollllf
rrrrrrolf
rolffff
所以基本上我有这个正则表达式(我知道这还不够,因为我已经在regex101网站上试过了)
.+(?![rolf]).+
我使用此作为基线,因为它没有捕获正确的用户名:
rolf
但它并没有抓住所有其他的"欺骗"用户名的版本。
任何想法如何才能让我的正则表达式更有效率?
提前致谢!
答案 0 :(得分:1)
不完全匹配rolf
您可以使用否定前瞻(?!
断言从字符串开头后面的内容不是'rolf'直到字符串结尾。
匹配
^
在字符串开头处断言位置(?!
否定前瞻声明后面的内容不是
rolf
按字面意思匹配)
关闭否定前瞻.+
匹配任何字符一次或多次$
断言字符串末尾的位置从您的示例正则表达式中,您匹配.+
,其中@Ωmega 有一个公平点,匹配空格。
您可以指定.+
可以接受的字符,例如匹配一个或多个字词或使用character class指定更多字符,而不是\w+
。
答案 1 :(得分:1)
答案 2 :(得分:0)
您可以使用正则表达式
\b(?!rolf\b)\S+\b
使用此模式 here
\b
字边界 - 匹配a之间的字边界位置 单词字符和非单词字符或位置(开头/结尾) 字符串)。
(?!
否定前瞻 - 指定无法匹配的群组 在主表达式之后(如果匹配,则结果被丢弃)。
\S
不是空格 - 匹配任何非空格的字符 空白字符(空格,制表符,换行符)。
+
量词 - 匹配前面一个或多个令牌。
测试您的输入。