2016-02-18 14 views
0

我是RegExp的新手,但做了一些基本的教程。从下面,我需要能够提取以下内容。你的帮助将增强我对RegExp的理解。具体搜索模式RegExp

提取字符串:

2016-02-17 19:59:18,182 GMT [transaction-Id=47ad8e96-1db8-4b41-85e5-9256fca485ab] [request_uri=/mydevice/2232234] [] INFO Response:{"executionTimeInMillis":54,"transactionId":"3191569800","success":false,"internalTransactionId":"47ad8e96-1db8-4b41-85e5-9256fca485ab","operationResults":[{"operation":"addDevice","code":"409","message":"Cannot add device"}]} 

输出字符串值将被提取:

  1. 47ad8e96-1db8-4b41-85e5-9256fca485ab
  2. 22xs32234
  3. {"operation":"addDevice","code":"409","message":"Cannot add device"}

回答

1
transaction-Id=(.*?)].*?request_uri=(.*?)].*?"operationResults":[(.*?)] 

提取$ 0,$ 1,$ 2

1

Perl代码:

#!/usr/bin/perl 

    use strict; 
    use warnings; 

    my $string = '2016-02-17 19:59:18,182 GMT [transaction-Id=47ad8e96-1db8- 4b41-85e5-9256fca485ab] [request_uri=/mydevice/2232234] [] INFO Response:{"executionTimeInMillis":54,"transactionId":"3191569800","success":false,"internalTransactionId":"47ad8e96-1db8-4b41-85e5-9256fca485ab","operationResults":[{"operation":"addDevice","code":"409","message":"Cannot add device"}]}'; 


    if($string =~ /(?:transaction\-Id=)(.*)\] \[(?:request_uri=\/mydevice\/)(.*)\] \[.*(?:operationResults.:\[)(.*)\]\}$/ig){ 
     print "$1\n$2\n$3\n"; 
    } 
    else{ 
     print "no match\n"; 
    } 
0

(?<=[\/=\[])([^\/=\[]+)(?=\])如果你想,如果你不来指代匹配,(?<=[\/=\[])[^\/=\[]+(?=\])

“22xs32234”的预期结果是正确的吗?由于“2232234”是原始字符串。如果是的话,那么这些表达式还没有准备好。

DEMO

用更少的跑步步另一种解决方案(更快,但想通了还给整个URI你不想): (?<=transaction-Id=|request_uri=|operationResults.:\[)[^\]]+

DEMO

最后一个固定的版本(比第一个更快): (?<=transaction-Id=|request_uri=|operationResults.:\[)(?:\/[^\]]+\/)?([^\]]+)

DEMO