如何使用正则表达式替换持续时间

时间:2013-02-20 22:37:02

标签: regex perl splunk

我正在努力争取一些正则表达式。我正在写一个splunk查询,其中一个字段是一个持续时间,我需要做一些文本替换。以下是样本值及其替换。

value| replacement
01| 01 sec
01:02| 01 min 02 sec
01:02:03|01 hr 02 min 03 sec
01+02:03:04|01 day 02 hr 03 min 04 sec

任何帮助将不胜感激。感谢

1 个答案:

答案 0 :(得分:0)

我相信这会奏效:

((((?<day>\d{2})\+)?(?<hr>\d{2}):)?(?<min>\d{2}):)?(?<sec>\d{2})

以上在.NET中运行良好,并且应该与perl 100%兼容(根据文档,这是splunk使用的风格)。

你必须自己添加“sec”,“min”等内容,但你可以使用命名捕获来提取数字(你可以测试命名捕获是否成功确定添加多少)。

分解:

(
    (
        (
            (?<day>\d{2})\+   # day is optional, but req hr ('+' not captured)
        )?
        (?<hr>\d{2}):         # hr is optional, but req min (':' not captured)
    )?
    (?<min>\d{2}):            # min is optional, but req sec (':' not captured)
)?
(?<sec>\d{2})                 # sec is required