RegEx:硬编码捕获组值

时间:2015-10-01 14:39:01

标签: regex fluentd

我试图为我的流利服务器编写自己的RegEx。 这是我的正则表达式:

^(?<server>)\[(?<time>[^\]]*)\] (.*) \[(?<filename>[^\]]*)\:(?<line>[^\]]*)\](.*) To: (?<to>((?!\ \-\- Headers).)*)(.*) ((?=From:[ ]*(?<from>[^:]*) ([a-zA-Z\-:]*)))

使用日志示例:https://regex101.com/r/yJ7rU4/1

我想为我的服务器组的RegEx定义一个值,但我不知道如何编写它以及它是否可能。我的解析文件没有写入此值,我想将此信息直接放在我的表达式上,如下所示:

^(?<server>=serv1)\[(?<time>[^\]]*)\] (.*) \[(?<filename>[^\]]*)\:(?<line>[^\]]*)\](.*) To: (?<to>((?!\ \-\- Headers).)*)(.*) ((?=From:[ ]*(?<from>[^:]*) ([a-zA-Z\-:]*)))

1 个答案:

答案 0 :(得分:0)

如果你想捕获一些可选的字符串(如果它存在并将它放在你的服务器组中),那么你只需使用一个0或更多的贪心量词......就像这样:

^(?<server>.*?)\[(?<time>[^\]]*)\] (.*) \[(?<filename>[^\]]*)\:(?<line>[^\]]*)\](.*) To: (?<to>((?!\ \-\- Headers).)*)(.*) ((?=From:[ ]*(?<from>[^:]*) ([a-zA-Z\-:]*)))
           ^^^---Here

<强> Working demo

如果您需要服务器名称,可以使用+操作

^(?<server>.+?)\[(?<time>[^\]]*)\] (.*) \[(?<filename>[^\]]*)\:(?<line>[^\]]*)\](.*) To: (?<to>((?!\ \-\- Headers).)*)(.*) ((?=From:[ ]*(?<from>[^:]*) ([a-zA-Z\-:]*)))
           ^^^---Here