regex Bash脚本中的正则表达式

5rgfhyps  于 2023-06-30  发布在  其他
关注(0)|答案(1)|浏览(70)

我正在检查一个字符串是否符合以下格式:

10_06_13

即今天的日期,或具有“2digits_2digits_2digits”的类似日期。
我所做的:

regex='([0-9][0-9][_][0-9][0-9][_][0-9][0-9])'
if [[ "$incoming_string" =~ $regex ]]
then
   # Do awesome stuff here
fi

这在一定程度上起作用。但是当传入的字符串等于011_100_131时,它仍然通过正则表达式检查。我如何修复我的正则表达式以只接受正确的格式?

fruv7luv

fruv7luv1#

=~成功,如果左边的字符串 * 包含 * 与右边的正则表达式匹配。如果你想知道字符串 * 是否匹配 * 正则表达式,你需要在两边“锚”正则表达式,像这样:

regex='^[0-9][0-9][_][0-9][0-9][_][0-9][0-9]$'
if [[ $incoming_string =~ $regex ]]
then
  # Do awesome stuff here
fi

^只在字符串的开头成功,而$只在字符串的结尾成功。
注意事项:
1.我从正则表达式中删除了不必要的(),从[[ ... ]]中删除了""

  1. bash手册用词不当,因为它说如果字符串匹配,=~就成功。

相关问题