Bash:字符串与正则表达式的精确匹配

Fed*_*nzi 7 linux bash regex

我必须使用正则表达式对字符串进行精确匹配。我必须意识到这种模式:toCheck 必须以 2 次出现的 $str1 开始,最多出现 1 次 $str2。如果 toCheck 匹配模式,我必须在输出中写入 $toCheck:success,否则 $toCheck:failed。

我写了这个正则表达式:

regex="$1($1)+$2"
Run Code Online (Sandbox Code Playgroud)

使用站点 regexr.com,我插入了例如:

regex="lo(lo)ba"
toCheck="loloba"
Run Code Online (Sandbox Code Playgroud)

这是一个成功。

在 regerx.com 上,这场比赛直到最后一场比赛:

toCheck="lolobaba"
Run Code Online (Sandbox Code Playgroud)

但是,在我的 bash 代码上,它是成功的。

这是完整的代码:

toCheck="lolobaba"
regex="lo(lo)+ba"

if [[ $toCheck =~ $regex ]]; then

    echo "$toCheck:success" > output
else
    echo "$toCheck:failed" > output
fi
Run Code Online (Sandbox Code Playgroud)

所以,问题是:如何在字符串和正则表达式之间进行精确匹配?

Sek*_*eki 8

你会成功,因为正则表达式匹配了它的一部分

如果您想要完全匹配,则需要将模式锚定到行的开头和结尾:regex="^lo(lo)+ba$"

  • ^代表的字符串的开头:没什么可图案前
  • $代表字符串的结尾:没什么可后

在您的原始代码中,由于模式没有被锚定,如果字符串的至少一部分验证了模式,则模式匹配并不关心之前或之后的内容。