-2

我有这段代码:

{ 
    if ($4 ~search) 
    {
        match ($4, /([0-9]{2}\/([a-zA-z]{3})\/([0-9]{4}))/, dates)

        print dates[1] "\t" dates[2] "\t" dates[3]
    }
}

当它运行时,它会产生这个:

[19/Oct/2012:12:34:32
[19/Oct/2012:12:34:32
[19/Oct/2012:12:34:33

所以理论上它正在工作并产生我想要的一些东西,但我如何让它产生19/Oct/2012任何建议?

我的问题是我希望输出只生成 2012 年 10 月 19 日的日期?

4

2 回答 2

1

您需要修复您的正则表达式:

{
    match ($4,/[0-9]{2}\/[a-zA-z]{3}\/[0-9]{4}/,date)
    print date[0] 
}

将输出:

19/Oct/2012
19/Oct/2012    
19/Oct/2012

笔记:

  • 您当前regexp查找带有数字月份的日期,例如 19/10/2012not 19/Oct/2012

  • 您的捕获组未匹配(不平衡括号)

  • 在您给出的示例中,年份20012不是2012!?

  • 你从datesdate

  • date[0]存储整个匹配,同时date[n]引用第 n 个捕获组。

可能有更好的方法来解决您的整体问题,但是给出的信息非常少(而且非常错误)是不可能的。

编辑:

似乎剩下的唯一问题是放错位置的捕获组。

{
    match ($4, /([0-9]{2})\/([a-zA-z]{3})\/([0-9]{4})/, dates)    
    print dates[1] "\t" dates[2] "\t" dates[3]
}

将输出:

19    Oct   2012
19    Oct   2012
19    Oct   2012

但是在您的问题中,您声明您想要格式的输出19/Oct/2012 (这是我的第一个建议)!?

于 2013-03-18T14:47:46.267 回答
0

忽略代码示例和输出中的错误,如果您只想去掉前导[,那么您可以只substr匹配从第二个字符开始的匹配:

print substr(date[0], 2)

但是,我建议修改您的正则表达式以输出正确的匹配开始。

于 2013-03-18T15:07:13.543 回答