Bash 脚本中的正则表达式

2024-03-30

我正在尝试检查字符串是否与此格式匹配:

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,它仍然通过正则表达式检查。如何修复我的正则表达式以仅接受正确的格式?


=~如果左边的字符串成功contains右侧正则表达式的匹配项。如果你想知道字符串是否matches正则表达式,您需要在两侧“锚定”正则表达式,如下所示:

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

The ^仅在字符串的开头成功,并且$只有最后才能成功。

Notes:

  1. 我删除了不必要的()从正则表达式和""来自[[ ... ]].
  2. bash 手册的措辞很糟糕,因为它说=~如果字符串匹配则成功。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Bash 脚本中的正则表达式 的相关文章

随机推荐