use*_*732 1 regex bash if-statement
我想用正则表达式检查这种字符串:
2020_2021_01_01
我把它放在一个变量中,比如$ session
我这样做:
if [[ "$session" =~ \d{4}[_]\d{4}[_]\d{2}[_]\d{2} ]]; then
stuff
fi
Run Code Online (Sandbox Code Playgroud)
你看......它不起作用......但我不知道为什么......
任何帮助?谢谢!
所述的bash手册而简洁地解释说,当=~操作者"时,该字符串给操作者的右侧被认为是一个扩展正则表达式,并相应地匹配(如在正则表达式(3))".
这里regex(3)是一个引用man 3 regex,可以解释"扩展正则表达式"是什么.更长的描述是"Posix标准扩展正则表达式",您可以在Posix文档中找到这些文档.如果您使用的是在线正则表达式测试程序,请确保选择"Posix正则表达式".
简而言之,它们不包括像Perlisms \d.您可以编写[[:digit:]]或(如果您使用的是C语言环境)[0-9].
所以你的正则表达式可以写成:
([[:digit:]]{4}_){2}[[:digit:]]{2}_[[:digit:]]{2}
Run Code Online (Sandbox Code Playgroud)
(没有必要引用_).但是,请注意=~操作符要查找与模式匹配的子字符串,而不是测试左侧操作符是否与模式完全匹配.所以你很可能真的想要一个锚定的匹配:
^([[:digit:]]{4}_){2}[[:digit:]]{2}_[[:digit:]]{2}$
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3521 次 |
| 最近记录: |