正则表达式忽略单词

时间:2016-11-15 16:29:01

标签: regex unix

我有这个字符串:

[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 .*\]

如何忽略日期和消息之间的所有单词以仅使用一个匹配来获取它们?

1 个答案:

答案 0 :(得分: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