我有这段代码:
{
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日的日期?
答案 0 :(得分: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/2012
不是19/Oct/2012
。
您的捕获组未匹配(不平衡括号)。
在您的示例中,年份为20012
而非2012
!?
您从dates
转到date
。
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
(这是我的第一个建议)!
答案 1 :(得分:0)
忽略代码示例和输出中的错误,如果您只想删除前导[
,那么您可以substr
从第2个字符开始匹配:
print substr(date[0], 2)
但是,我建议您修改正则表达式以输出正确的匹配项。