Regex Bash脚本中的正则表达式

Regex Bash脚本中的正则表达式,regex,linux,bash,expression,Regex,Linux,Bash,Expression,你好,很棒的社区 说到正则表达式,我完全是个笨蛋。我已经推迟了学习。。现在我的懒惰已经追上了我 我想做的事: 检查字符串是否与此格式匹配: 10_06_13 即今天的日期,或与“2digits\u2Digits\u2Digits”类似的日期 我所做的: regex='([0-9][0-9][_][0-9][0-9][_][0-9][0-9])' if [[ "$incoming_string" =~ $regex ]] then # Do awesome stuff here fi 这

你好,很棒的社区

说到正则表达式,我完全是个笨蛋。我已经推迟了学习。。现在我的懒惰已经追上了我

我想做的事:
检查字符串是否与此格式匹配:

10_06_13
即今天的日期,或与“2digits\u2Digits\u2Digits”类似的日期

我所做的:

regex='([0-9][0-9][_][0-9][0-9][_][0-9][0-9])'
if [[ "$incoming_string" =~ $regex ]]
then
   # Do awesome stuff here
fi
这在一定程度上是可行的。但是,当传入字符串等于
011\u 100\u 131
。。。它仍然通过了正则表达式检查

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

如果左侧的字符串与右侧的正则表达式匹配,则欢呼声将成功。如果想知道字符串是否与正则表达式匹配,需要在两侧“锚定”正则表达式,如下所示:

regex='^[0-9][0-9][_][0-9][0-9][_][0-9][0-9]$'
if [[ $incoming_string =~ $regex ]]
then
  # Do awesome stuff here
fi
^
仅在字符串开头成功,而
$
仅在字符串结尾成功

注:

  • 我从正则表达式中删除了不必要的
    ()
    ,从
    […]
    中删除了
  • bash手册措词不当,因为它说如果字符串匹配,
    =~
    就会成功
    该死,我差一点就到了!我认为“^”是排除字符。非常感谢!:)@Robbie:
    ^
    当它是字符集中的第一件事时,表示“排除”(
    […]
    ),当它是模式中的第一件事时,表示“锚定”。否则,它只匹配
    ^
    (但并非在所有正则表达式实现中都是如此;有时它意味着“匹配行的开头”)。我同意在你习惯之前它是令人困惑的。如上所述,你可以用
    \
    替换
    [\]
    ,而不改变正则表达式匹配的内容。请注意,下划线不需要放在方括号中<代码>\uu与
    [\u]
    匹配相同的内容。011\u 100\u 131与您的正则表达式不匹配。011_10_131会。