正则表达式不起作用,遵循参数中的错误路径

时间:2019-02-18 11:15:52

标签: regex awk

我有一个正则表达式参数。它检查变量的内容,在这种情况下,内容是时间,格式为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参数以及变量是否匹配

2 个答案:

答案 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})?$/