34

你好很棒的社区,

当谈到正则表达式时,我是个十足的笨蛋。我推迟了学习它..现在我的懒惰已经赶上了我。

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

10_06_13

IE。今天的日期,或带有“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... 它仍然通过正则表达式检查。

如果有人能帮助我指出正确的方向,我将不胜感激。
干杯

4

1 回答 1

54

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

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

^only 在字符串开头成功,only$在结尾成功。

笔记:

  1. 我从()正则表达式和.""[[ ... ]]
  2. bash 手册措辞不佳,因为它说=~如果字符串匹配则成功。
于 2013-06-10T16:14:05.340 回答