我有这样的条件
[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
答案 0 :(得分:0)
您需要删除起始\]\s
模式,并且还需要将(.+)
更改为(.+?)
或([^\"]+)
,因为默认情况下.+
是贪婪的。它贪婪地匹配所有字符,直到severity
之前存在的双引号。
\[msg\s\"([^\"]+)\"\]\s(?:\[data|\[severity)
从组索引1中获取所需的字符串。
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