正则表达式在多个分隔符之间找到任何东西

时间:2014-04-08 21:30:40

标签: java regex

我尝试使用基于Java的正则表达式引擎/解释器来匹配不同分隔符之间的任何内容。我之后的文本是server.domain.com我不相信我也可以使用任何Java,只有正则表达式。日志只有一个或另一个,而不是两者。这必须使用单个正则表达式完成,否则必须重写应用程序。

日志示例:

Host = server.domain.com|

Host="server.domain.com"

到目前为止,我已经尝试了以下内容以及其他一些组合...

Host="(.*?)"|Host\s=\s(.*?)\|

我还必须使用Host作为分隔符的一部分,因为它正在解析日志中包含许多其他类似的部分。

感谢您提供任何帮助!

3 个答案:

答案 0 :(得分:1)

对于给出的示例,您可以使用:

^Host\s*=\s*(?:")?(?:[^|"])+[|"]$

Regular expression visualization

Debuggex Demo

它也会接受

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)