我有一个正则表达式参数。它检查变量的内容,在这种情况下,内容是时间,格式为HH:MM:SS,但是在运行代码行时,系统将按照路径显示它已失败并且不符合条件。
!($11~/^(?:[01]?\d|2[0-3]):[0-5]\d:[0-5]\d|^$/) {print "11th field invalid";}
这就是上述代码,这是变量“ 11:40:59”的内容。
现在,如果变量中包含时间,我希望代码在程序中继续进行。但是,例如,如果变量中包含字母字符,则我希望程序打印“第11个字段无效”并退出程序。
我还检查了tester中的regex参数以及变量是否匹配
答案 0 :(得分:1)
Awk不支持PCRE。如评论中所述,不支持 var parse_data = JSON.parse(data);
和\d
。
如果使用GNU awk,则测试时间是否正确的另一种方法是使用?:
函数。
mktime
第一行用时,分,秒字段填充数组a。
如果创建日期失败,函数split($11, a, ":")
if(mktime("2019 1 1 " a[1] " " a[2] " " a[3]) == -1){
print "11th field invalid"
}
将返回mktime
。
答案 1 :(得分:0)
使用awk支持的ERE此PCRE(如果我正确理解的话):
!($11~/^(?:[01]?\d|2[0-3]):[0-5]\d:[0-5]\d|^$/)
将是:
!($11~/^([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]|^$/)
但是您可以将表达式写为:
!($11~/^([01]?[0-9]|2[0-3])(:[0-5][0-9]){2}|^$/)
,并且在非null部分中仍然缺少终止符$
,因此实际上应该是:
!($11~/^(([01]?[0-9]|2[0-3])(:[0-5][0-9]){2})?$/)
或:
$11 !~ /^(([01]?[0-9]|2[0-3])(:[0-5][0-9]){2})?$/