使用PRCE Regex,我想捕获不同apache博客的每个字段。这些日志的结构就像这个例子:
aaa bbb“cc c”ddd“eee”fff
每个区域都由一个空格分隔。但是字段也可能包含空格,在这种情况下,它们在字段的开头和结尾用引号括起来(“cc c”)。不包含空格的字段我也在字段的开头和结尾有引号(“eee”)。
结果应该为每个字段都有一个捕获组,因此对于应该是的示例: 第1组:aaa 第2组:bbb 第3组:“cc c” 第4组:ddd 第5组:“eee” 第6组:fff
我的问题是我想要一个通用的解决方案,例如量词 - 有类似的东西: (?:((AA | BB | “CC” | DD)\ S){1,})
但这里的量词总是在aaa重复。
非常感谢整洁,有效的解决方案。
答案 0 :(得分:0)
我理解您正在使用PCRE,问题是您使用什么实际工具来处理正则表达式。
假设你自己使用perl,让我们研究一个字段是由什么构成的?
"
"
在正则表达式中,上面的表达式如下所示:
"?[^"]+"?
然后,您可以选择量化上述内容并指定您拥有的列数:
("?[^"]+"?){1,6}
以上说允许1到6个这样的字段,问题就变成了如何应用/使用正则表达式?这取决于工具,在它看起来像perl:
@groups = $apache_line =~ m/("?[^"]+"?)/g
从这里$ groups [0]会有aaa $ group [1]:bbb ... $ group [5]:fff
上述方法有效,因为m //运算符位于列表上下文
中