在OSX上,我正在构建一个函数来验证日期格式,然后将其转换为时代时间。该函数应验证日期是否为以下格式之一,如果没有错误的话:01/01/1970 10:00PM
或10:00PM
(%m/%d/%Y %I:%M%p
或%I:%M%p
)
功能
checkTIME () {
local CONVERT_CHK_TIME="$1"
if [[ "$CONVERT_CHK_TIME" =~ ^(0[0-9]|1[0-2]):[0-9][0-9](AM|PM)$ ]]; then
CONVERT_TIME="$(date -j -f "%I:%M%p" "$CONVERT_CHK_TIME" "+%s")"
elif [[ "$CONVERT_CHK_TIME" =~ (0[0-9]|1[0-2])\/([0-2][0-9]|3[0-1])\/\d{4}\s[0-9][0-9]:[0-9][0-9](AM|PM) ]]; then
CONVERT_TIME="$(date -j -f "%m/%d/%Y %I:%M%p" "$CONVERT_CHK_TIME" "+%s")"
else
echo "ERROR!"
exit 1
fi
}
它目前可以正常使用,10:00PM
但在我尝试时无法匹配01/10/2017 10:00PM
我这样称呼它:
./convert '01/10/2017 10:00PM'
...
...
+ [[ -n 01/10/2017 10:00PM ]]
+ checkTIME '01/10/2017 10:00PM'
+ local 'CONVERT_CHK_TIME=01/10/2017 10:00PM'
+ [[ 01/10/2017 10:00PM =~ ^(0[0-9]|1[0-2]):[0-9][0-9](AM|PM)$ ]]
+ [[ 01/10/2017 10:00PM =~ (0[0-9]|1[0-2])/([0-2][0-9]|3[0-1])/d{4}s[0-9][0-9]:[0-9][0-9](AM|PM) ]]
+ echo 'ERROR!'
ERROR!
+ exit 1
谢谢!
我还尝试了以下正则表达式:
(0[0-9]|1[0-2])\/([0-2][0-9]|3[0-1])\/\d{4}\ [0-9][0-9]:[0-9][0-9](AM|PM)
\d
匹配某些版本的regex(perl)中的十进制数字,但不匹配中用于命令运算符的扩展正则表达式。=~
[[
bash
因此,将更\d
改为[0-9]
将匹配4个十进制数字的模式。
同样适用于\s
。要匹配一个文字空格字符,请\s
用转义的空格(\
)代替。如果要匹配1个或多个空格(空格或制表符),请\s
用替换[[:blank:]]+
。
man bash
表示=~
正则表达式根据扩展的正则表达式语法进行匹配,如中所述regex(3)
。
man 3 regex
(POSIX正则表达式函数)说SEE ALSO regex(7)
。
man 7 regex
给出了正则表达式语法的说明,并说SEE ALSO POSIX.2, section 2.8 (Regular Expression Notation)
。
您可以在The Open Group的Posix正则表达式文档中找到完整的POSIX扩展正则表达式语法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句