2016-02-18 56 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