为什么这个正则表达式几乎与所有内容相匹配?

Ist*_*van 1 regex bash

我无法解释,但请查看以下内容:

name=$1
pat="\b[0-9a-zA-Z_]+\b"

if [[ $name =~ $pat ]]; then
  echo "$name is ok as user name"
else
  echo "$name is not ok as user name"
  exit 1
fi
Run Code Online (Sandbox Code Playgroud)

测试运行:

./script test_user+
test_user+ is ok as user name
Run Code Online (Sandbox Code Playgroud)

带有+号的用户名不应与该正则表达式匹配.

Dar*_*con 5

首先:

\b是PCRE的延伸; 它在ERE中不可用,ERE =~ 是bash [[ ]]语法中的运算符使用的.

(从Bash正则表达式与单词边界匹配)

其次,\b如果您希望强制整个字符串匹配,则不需要单词boundary().您想匹配start(^)和end($):

pat="^[0-9a-zA-Z_]+\$"
Run Code Online (Sandbox Code Playgroud)