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