如何用正则表达式实现这个条件?

时间:2014-08-13 10:42:06

标签: java regex

使用java中的正则表达式,如何设置条件,即if-then-else?显然,我想在条件中添加条件if "http" exist, "www" CAN existif "http" doesnot exist "www" HAVE TO exist。如何使用正则表达式实现该条件?

我做了什么

      ((http){0,1}|(www){0,1})

但这不起作用

示例输入:

  • 如果字符串以" http"开头在它之后," www"可以来。

    ex: " httpwww< sometext>" --->应匹配

    ex: " http< sometext>" --->应匹配

  • 如果字符串没有以" http"开头,字符串必须以" www"

    开头

    ex: " www< sometext>" --->应匹配

    ex: "< sometext>" ---->不应该与正则表达式相匹配,因为它不是以http和www开头的

4 个答案:

答案 0 :(得分:1)

使用简单的正则表达式匹配:

boolean matches = myString.matches("^(?:http|www).*");
// The .* is for Java implementation

这是regex demo

答案 1 :(得分:1)

一个简单的解决方案是使用注释中指定的“环顾四周”。

如果我正在使用实际的网址,您也可以使用实际的URL对象来执行此操作。

例如:

String[] input = { "http://www.google.com", "http://foo.com", "www.foo.com" };
Pattern p = Pattern.compile("(?<=http).*(?=www)");
for (String s : input) {
    Matcher m = p.matcher(s);
    System.out.printf("Found in %s? %b%n", s, m.find());
    try {
        URL u = new URL(s);

        System.out.printf("Authority starts with www and protocol is http for %s? %b%n", s,
                u.getAuthority().startsWith("www") && u.getProtocol().equals("http"));
    }
    catch (MalformedURLException mue) {
        System.out.printf("%s is not interpreted as well-formed URL.%n", s);
    }
}

<强>输出

Found in http://www.google.com? true
Authority starts with www and protocol is http for http://www.google.com? true
Found in http://foo.com? false
Authority starts with www and protocol is http for http://foo.com? false
Found in www.foo.com? false
www.foo.com is not interpreted as well-formed URL.

答案 2 :(得分:1)

实际上,您的String httpwww开头。 如果http后面跟着www,你就不在乎了。所有你关心的是你的字符串总是以* http8或 www 开头,而不是别的。 所以,

public static void main(String[] args) {
    String s1 = "http://www.google.com";
    String s2 = "www.google.com";
    String s3 = "sdfwww.google.com";
    System.out.println(s1.matches("^(http|www).*"));
    System.out.println(s2.matches("^(http|www).*"));
    System.out.println(s3.matches("^(http|www).*"));

}

O / P ::

true
true
false

答案 3 :(得分:0)

试试这个演示,

http://regex101.com/r/dW7jJ0/3

正则表达式

^(httpwww|http|www)