2016-11-15 148 views
1

我有這個字符串:正則表達式忽略字

[06/Aug/2016: 11:47:29 +0500] [cameroun.tn][/var/log][2] Warning. Match of "rx \\.(jpg|gif|png|js|css|ttf)$" against "REQUEST_FILENAME" required. [file "/var/log"] [line "29"] [td "90"] [msg "wel done"] 

我使用這個正則表達式來提取日期:

^\[[^][]*[+][0-9]{4}] 

和消息:

\[msg .*\] 

哪有我忽略日期和消息之間的所有單詞以僅使用單個匹配獲取它們?

+0

也許'^ \ [[^] [] * [+] [0 -9] {4}](。*)\ [msg'並抓取組1的內容? –

+1

使用捕獲組。 – Fairy

+1

預期產量是多少?你使用的是什麼確切的工具? 'grep'?使用'grep',你需要一個像'grep -oP'這樣的PCRE正則表達式(?<=^\ [[^] [] * [+] [0-9] {4}])。*(?= \ msg)'' –

回答

0

你想要的模式是:

^\[([^][]*\+\d{4})\].*\[(msg\s*"[^"]*"\s*)\] 

Demo on Regex101

它所要做的就是比賽,並捕獲日期字符串,匹配字符串的其餘部分,然後匹配並捕獲消息。然後,您可以提取捕獲組的內容(我假設你在bash從你的問題標籤這樣做):

pattern='^\[([^][]*\+\d{4})\].*\[(msg\s*"[^"]*"\s*)\]' 
if [[ $string =~ $pattern ]] 
then 
    echo "${BASH_REMATCH[1]} ${BASH_REMATCH[2]}" 
fi 
+0

的所有行謝謝,請你適應這個正則表達式^ [([^] [] * \ + \ d {4})] * [(msg \ s *「[^」] *「\ s *)]用pyton編譯它與regxp python compilateur – user2148747