java中的正则表达式代码

时间:2014-03-08 15:30:09

标签: java regex

我想跳过包含任何办公室文件格式的网址或网址末尾的pdf,这是我的代码。

String Url ="http://chemistry.csudh.edu/faculty/jim/aromaticity.ppt";

        if (!Url.matches(".*(doc|dot|docx|docm|dotx|dotm)")
                || !Url.matches(".*ppt|pot|pps")
                || !Url.matches(".*xls|xlt|xlm")
                || !Url.matches(".*pdf"))
            System.out.print(Url);
        else
            System.out.print("true");

我想知道这个代码片段有什么问题,因为它每次打印url但我想跳过包含上述任何格式的url。

3 个答案:

答案 0 :(得分:2)

您缺少第二个和第三个正则表达式中的括号。 !Url.matches(".*ppt|pot|pps")将匹配所有未以ppt结尾的网址,但abc.pot之类的网址将不会与该正则表达式匹配,条件将为true。你应该把它改成:

!Url.matches(".*(ppt|pot|pps)")

..和第一个正则表达式一样。此外,您的情况应该是&&而不是||

顺便说一句,为什么你有4个不同的matches()调用?这将需要编译4个不同的正则表达式,而你可以用一个正则表达式完成它。只需将所有扩展名添加到第一个正则表达式列表中:

if (!url.matches(".*(doc|dot|docx|docm|dotx|dotm|ppt|pot|pps|xls|xlt|xlm|pdf)")

P.S:请遵循Java命名约定。变量名称应以小写字母开头。

答案 1 :(得分:1)

这是logic错误,您应将其更改为

String Url ="http://chemistry.csudh.edu/faculty/jim/aromaticity.ppt";

    if (!Url.matches(".*(doc|dot|docx|docm|dotx|dotm)")
            && !Url.matches(".*ppt|pot|pps")
            && !Url.matches(".*xls|xlt|xlm")
            && !Url.matches(".*pdf"))
        System.out.print(Url);
    else
        System.out.print("true");

答案 2 :(得分:1)

您的情况是否有问题,因为您使用的是||而不是&&。请考虑以下情况 - 以.pdf结尾的网址不能以.doc结尾,反之亦然 - 因此条件始终评估为true。从逻辑上讲,您希望测试网址与任何文档格式不匹配 - 使用&&推断:

String Url ="http://chemistry.csudh.edu/faculty/jim/aromaticity.ppt";

if (!Url.matches(".*(doc|dot|docx|docm|dotx|dotm)")
        && !Url.matches(".*ppt|pot|pps")
        && !Url.matches(".*xls|xlt|xlm")
        && !Url.matches(".*pdf"))
    System.out.print(Url);
else {
    System.out.print("true");
}
相关问题