2017-02-01 74 views
1

我是與正則表達式 輸入例子的throble:正則表達式匹配,如果存在,或者忽略

/aaaa/admin.php?file=xpto.js&version=abcd123 
/aaaa/admin.php 

輸出1 -

url => /aaaa/admin.php 
var => file=xpto.js&version=abcd123 

輸出2 -

url => /aaaa/admin.php 

我試圖%{NOTSPACE:url}(?:/?%{NOTSPACE:var})和其他人但沒有工作

回答

1

URL字符串您可以使用

%{URIPATH:path}(?:%{URIPARAM:param})? 

https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns都提供了模式。

%{URIPATH:path}將匹配的路徑,而(?:%{URIPARAM:param})?將匹配的1點或0的出現(由於可選的非捕獲組(?:...)?)查詢字符串的。

如果您需要在param擺脫?的,你也可以使用

(?<path>(?:/[A-Za-z0-9$.+!*'(){},~:;[email protected]#%_-]*)+)(?:\?(?<param>[A-Za-z0-9$.+!*'|(){},[email protected]#%&/=:;_?\[\]-]*))? 

輸出爲/aaaa/admin.php?file=xpto.js&version=abcd123輸入:

{ 
    "path": [ 
    [ 
     "/aaaa/admin.php" 
    ] 
    ], 
    "param": [ 
    [ 
     "?file=xpto.js&version=abcd123" 
    ] 
    ] 
} 

輸出爲/aaaa/admin.php

{ 
    "path": [ 
    [ 
     "/aaaa/admin.php" 
    ] 
    ], 
    "param": [ 
    [ 
     null 
    ] 
    ] 
} 
+0

謝謝。在https://grokconstructor.appspot.com/do/match上正常工作! – Jam

+0

我還添加了一個[自定義正則表達式](https://regex101.com/r/qnBJer/1)(基於grok內置模式),以防您想要在'param'中刪除''''值。 –

1

這是你想要的?

([^\s?]+)(?:\?(\S+))? 

您可以試一試here

另外,你可以只劈在?

相關問題