Ruby 正则表达式匹配组回溯
我试图多次从一个字符串中提取相同的数据(但是是不同的“块”),用例是在Fluentd中解析来自Fastly的Syslog消息 我有一行日志:Ruby 正则表达式匹配组回溯,ruby,regex,regex-lookarounds,fluentd,fastly,Ruby,Regex,Regex Lookarounds,Fluentd,Fastly,我试图多次从一个字符串中提取相同的数据(但是是不同的“块”),用例是在Fluentd中解析来自Fastly的Syslog消息 我有一行日志: 2015-08-27T12:36:58Z cache-foo1234 Name[123456]:4.151.22.16“-”POST/api/v1/foo/61ea23fb-53fb-4364-a892-349fdf5f6dca/event?发布类型=存储和版本=2%2E0%2E1&os=ios和设备版本=8%2E4和设备类型=iphone304错过BC9
2015-08-27T12:36:58Z cache-foo1234 Name[123456]:4.151.22.16“-”POST/api/v1/foo/61ea23fb-53fb-4364-a892-349fdf5f6dca/event?发布类型=存储和版本=2%2E0%2E1&os=ios和设备版本=8%2E4和设备类型=iphone304错过BC942858-64FA-4101-BAE1-192724907f iphone5s
到目前为止,这个正则表达式(Ruby正则表达式)是:
(?[^]*)(?[^]*)(?[^]*)(?[^]*)(?[^]*)(?[^]*)(?[^]*)(?[^]*)(?[^]*)(?[^]*)(?[^]*)(?[^]*)(?*)$
这给了我:
- 时间
2015-08-27T12:36:58Z
fastly\u服务器
cache-foo1234log\u name
name[123456]:host
4.151.22.16http\u方法
POSThttp\u request
/api/v1/foo/61ea23fb-53fb-4364-a892-349fdf5f6dca/event?发布类型=存储和版本=2%2E0%2E1&os=ios和设备操作系统版本=8%2E4&device类型=iphonehttp\u状态
304cache\u状态
MISSuuid
BC942858-64FA-4101-BAE1-19272490697Fdevice\u型号
iphone5s这很完美,但我如何才能返回并从具有相同正则表达式的相同字符串中提取ie.
61ea23fb-53fb-4364-a892-349fdf5f6dca
,事件
和设备操作系统版本
的值?以下是更新的正则表达式:
^(?<time>[^ ]*) (?<fastly_server>[^ ]*) (?<log_name>[^ ]*) (?<host>[^ ]*) (?<na>[^ ]*) (?<na2>[^ ]*) (?<http_method>[^ ]*) (?<http_request>\/api\/v\d+\/foo\/(?<guid>[^\/]+)\/(?<event>[^\/?]+)[^ ]*device_os_version=(?<devosver>[^=&]+)[^ ]*) (?<http_status>[^ ]*) (?<cache_status>[^ ]*) (?<uuid>[^ ]*) *(?<device_model>.*)$
(?[^]*)(?[^]*)(?[^]*)(?[^]*)(?[^]*)(?[^]*)(?[^]*)(?[^]*)(?\/api\/v\d+//foo\/(?[^\/]+)\/(?[^\/?]+)[^]*设备操作系统版本=((?[^=&++)(?[^]*)(?[^]*)(?[^]*))(?[^]*)((?[^]*)$
看
我刚刚将您的(?)
部件替换为
(?<http_request>\/api\/v\d+\/foo\/(?<guid>[^\/]+)\/(?<event>[^\/?]+)[^ ]*device_os_version=(?<devosver>[^=&]+)[^ ]*)
^----------------^^-----GUID-------^^--event-------^ ^-------OS Version-------- -------^
(?\/api\/v\d++\/foo\/(?[^\/]+)\/(?[^\/?]+)[^]*设备操作系统版本=(?[^=&]+)[^]*)
^----------------^^-----GUID------^^--事件------^^----操作系统版本---------------^