有条件的java正则表达式

时间:2015-01-17 11:00:54

标签: java regex

我有这样的条件

[msg "Invalid HTTP Request Line"] [data "CONNECT www.alipay.com:443 HTTP/1.1"] [severity "WARNING"]

我希望匹配invalid HTTP Request Line

我试试这个

\]\s\[msg\s\"(.+)\"\]\s((\[data)|(\[severity))

使用该正则表达式我所拥有的模式直到[saverity

1 个答案:

答案 0 :(得分:0)

您需要删除起始\]\s模式,并且还需要将(.+)更改为(.+?)([^\"]+),因为默认情况下.+是贪婪的。它贪婪地匹配所有字符,直到severity之前存在的双引号。

\[msg\s\"([^\"]+)\"\]\s(?:\[data|\[severity)

从组索引1中获取所需的字符串。

DEMO

String s = "[msg \"Invalid HTTP Request Line\"] [data \"CONNECT www.alipay.com:443 HTTP/1.1\"] [severity \"WARNING\"]";
Pattern pattern = Pattern.compile("\\[msg\\s\"([^\"]+)\"\\]\\s\\[(?:data|severity)");
Matcher m = pattern.matcher(s);
while(m.find())
{
    System.out.println(m.group(1));
}  

输出:

Invalid HTTP Request Line