Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 正则表达式匹配组回溯_Ruby_Regex_Regex Lookarounds_Fluentd_Fastly - Fatal编程技术网

Ruby 正则表达式匹配组回溯

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

我试图多次从一个字符串中提取相同的数据(但是是不同的“块”),用例是在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错过BC942858-64FA-4101-BAE1-192724907f iphone5s

到目前为止,这个正则表达式(Ruby正则表达式)是:

(?[^]*)(?[^]*)(?[^]*)(?[^]*)(?[^]*)(?[^]*)(?[^]*)(?[^]*)(?[^]*)(?[^]*)(?[^]*)(?[^]*)(?*)$

这给了我:

  • 时间
2015-08-27T12:36:58Z
  • fastly\u服务器
    cache-foo1234
  • log\u name
    name[123456]:
  • host
    4.151.22.16
  • http\u方法
    POST
  • http\u request
    /api/v1/foo/61ea23fb-53fb-4364-a892-349fdf5f6dca/event?发布类型=存储和版本=2%2E0%2E1&os=ios和设备操作系统版本=8%2E4&device类型=iphone
  • http\u状态
    304
  • cache\u状态
    MISS
  • uuid
    BC942858-64FA-4101-BAE1-19272490697F
  • device\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------^^--事件------^^----操作系统版本---------------^