我尝试使用基于Java的正则表达式引擎/解释器来匹配不同分隔符之间的任何内容。我之后的文本是server.domain.com我不相信我也可以使用任何Java,只有正则表达式。日志只有一个或另一个,而不是两者。这必须使用单个正则表达式完成,否则必须重写应用程序。
日志示例:
Host = server.domain.com|
或
Host="server.domain.com"
到目前为止,我已经尝试了以下内容以及其他一些组合...
Host="(.*?)"|Host\s=\s(.*?)\|
我还必须使用Host作为分隔符的一部分,因为它正在解析日志中包含许多其他类似的部分。
感谢您提供任何帮助!
答案 0 :(得分:1)
对于给出的示例,您可以使用:
^Host\s*=\s*(?:")?(?:[^|"])+[|"]$
它也会接受
host=server.domain.com"
但如果日志要么/或不应该成为问题。
答案 1 :(得分:0)
尝试使用字符串
String str1 = "Host = server.domain.com|";
String str2 = "Host=\"server.domain.com\"";
//Host(no or one space)=(" or one space)server.domain.com(| or ")
Pattern p = Pattern.compile("Host\\s?=[\\\"|\\s]server.domain.com[\\||\\\"]");
Matcher m = p.matcher(str1);
if (m.find()) {
System.out.println("found");
}
如果在等于。
的任何一侧都不知道空格,也可以尝试这个//Host(zero or more spaces)=(zero or more spaces)(" or spaces)server.domain.com(" or |)
Pattern p = Pattern.compile("Host\\s*=\\s*[\\\"|\\s*]server.domain.com[\\\"|\\|]");
答案 2 :(得分:0)
感谢aliteral mind,我了解了非捕获组,这是关键......
看哪!...
主机(:\ S = \ S | = \"?)(*。?)(?:\ || \&#34)