2016-11-15 149 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