我必须使用正则表达式对字符串进行精确匹配。我必须意识到这种模式: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)
所以,问题是:如何在字符串和正则表达式之间进行精确匹配?
你会成功,因为正则表达式匹配了它的一部分。
如果您想要完全匹配,则需要将模式锚定到行的开头和结尾:regex="^lo(lo)+ba$"
^代表的字符串的开头:没什么可图案前$代表字符串的结尾:没什么可后在您的原始代码中,由于模式没有被锚定,如果字符串的至少一部分验证了模式,则模式匹配并不关心之前或之后的内容。
| 归档时间: |
|
| 查看次数: |
26075 次 |
| 最近记录: |