Bash脚本中的正则表达式

Rob*_*bie 29 regex linux bash expression

您好,社区,

当谈到正则表达式时,我是一个完整的涂料.我推迟了学习......现在我的懒惰已经赶上了我.

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

10_06_13
Run Code Online (Sandbox Code Playgroud)

即.今天的日期,或与"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
Run Code Online (Sandbox Code Playgroud)

这在一定程度上起作用.但是当传入的字符串等于011_100_131...时,它仍然通过正则表达式检查.

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

ric*_*ici 45

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

regex='^[0-9][0-9][_][0-9][0-9][_][0-9][0-9]$'
if [[ $incoming_string =~ $regex ]]
then
  # Do awesome stuff here
fi
Run Code Online (Sandbox Code Playgroud)

^只成功在字符串的开头,并且$只有在成功结束.

笔记:

  1. ()从正则表达式中删除了不必要""的内容[[ ... ]].
  2. bash手册的措辞很差,因为它表示=~如果字符串匹配则成功.

  • @Robbie:`^`表示"排除",它是字符集中的第一个东西(`[...]`),当它是模式中的第一个东西时,它意味着"锚定".否则,它只匹配`^`(但在所有正则表达式实现中都不是这样;有时它意味着"匹配行的开头").我同意在你习惯之前它会让人困惑. (9认同)