如何在 BASH 中反转正则表达式比较

How to reverse Regex comparison in BASH

如何反转我的正则表达式比较结果

问题是正则表达式无效。具体来说,括号表达式 ([a-z0-9-_]) 无效,因为它在错误的位置包含破折号。

要在方括号表达式中包含文字破折号,您需要将其放在表达式的开头 ([-otherchars])、结尾 ([otherchars-]) 或范围的结尾([*--] 将匹配 C 语言环境中的“*”、“+”、“,”和“-”)。您的括号表达式包括 0-9-_,这看起来像两个范围粘在一起,并且无效。

要修复它,只需将“-”移动到括号表达式的开头或结尾:

USERNAME_REGEX="^[a-z0-9_-]{2,15}$"    # or
USERNAME_REGEX="^[-a-z0-9_]{2,15}$"