强制正则表达式根据介词忽略检测

时间:2019-03-25 06:48:26

标签: regex

我正在尝试构建一个正则表达式,它将检测字符串中提到的用户名。用户名看起来像“用户名”,“用户名[0-9]”,“ adm用户名”,“ adm用户名[0-9]”。

到目前为止,我有这个:\b(adm\-){0,1}username[0-9]{0,1}\b(链接:https://regexr.com/4at34

问题出在adm-。如果介词是aadm-username,则正则表达式仍会检测到“ username”,我希望它失败。任何提示如何做到这一点?

谢谢

1 个答案:

答案 0 :(得分:1)

在您的情况下,您可以将push_back替换为\b

此外,不要匹配边界。

最后,不要匹配中间组,为您的匹配创建一个大组。

演示

(?<![\w-])((?:adm-){0,1}username[0-9]{0,1})(?![\w-])

[\w-]

说明

[v] username 
[v] username2 
[v] adm-username 
[v] adm-username2 
[x] aadm-username 
[x] aadm-username2