java - java中的正则表达式代码

标签 java regex

我想跳过 URL 末尾包含任何 Office 文件格式或 pdf 的 URL,这是我的代码。

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。

最佳答案

您缺少第二个和第三个正则表达式中的括号。 !Url.matches(".*ppt|pot|pps") 将匹配所有不以 ppt 结尾的 URL,但类似于 abc 的 URL .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 命名约定。变量名称应以小写字母开头。

关于java - java中的正则表达式代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22271221/

相关文章:

javascript - 正则表达式用 HTML 标签替换字符

python - 正则表达式子序列匹配

java - Wicket:ListView 中的下拉选项没有附加 onClick 行为

java - Android TextInputEditText/TextInputLayout 截断错误信息

Java 搜索字符串

Java无法从同一目录中的.class中找到符号

c# - Unicode 名称正则表达式

regex - 根据 Scala 中的重复正则表达式拆分字符串

regex - sed - 替换几个连续的匹配模式的行

java - 如果 url 更改,则 Glide 是否有任何选项,然后缓存将被清除,否则加载旧图像?