【问题标题】:Regular expression String for URL in JAVAJAVA中URL的正则表达式字符串
【发布时间】:2014-02-26 04:17:03
【问题描述】:

我想用正则表达式检查 JAVA 中的 URL 验证。我找到了this 评论,并尝试在我的代码中使用它,如下所示...

private static final String PATTERN_URL = "/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+(:[0-9]+)?|(?:ww‌​w.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?‌​(?:[\w]*))?)/";


.....
if (!urlString.matches(PATTERN_URL)) {
  System.err.println("Invalid URL");
  return false;
}

但是我在编写PATTERN_URL 变量时遇到了编译时异常。我不知道如何格式化它,我担心如果我修改它会变成 invalid regex。任何人都可以在不丢失原件的情况下为我修复它吗?感谢您的帮助。

【问题讨论】:

    标签: java regex


    【解决方案1】:

    您的正则表达式看起来不错。您只需要通过转义所有转义斜杠来将其格式化为 Java 字符串:

    \ --> \\

    导致:

    "/((([A-Za-z]{3,9}:(?:\\/\\/)?)(?:[-;:&=\\+\\$,\\w]+@)?[A-Za-z0-9.-]+(:[0-9]+)?|(?:ww‌​w.|[-;:&=\\+\\$,\\w]+@)[A-Za-z0-9.-]+)((?:\\/[\\+~%\\/.\\w-_]*)?\\??(?:[-\\+=&;%@.\\w_]*)#?‌​(?:[\\w]*))?)/"
    

    在Java 解释这个字符串成java.util.regex.Pattern 之后,它会去掉那些多余的转义斜杠,变成你想要的正则表达式。您可以通过打印来证明这一点:

    System.out.println(Pattern.compile(PATTERN_URL));
    

    【讨论】:

    • 是的,感谢您的大力帮助。 String.matches("regex")java.util.Pattern.compile('regex')有什么区别?
    • 不多,除非你需要一遍又一遍地做,那么你会想要使用Pattern对象,这样可以避免每次迭代都重新编译Pattern(这就是String.matches(s) 在幕后工作)。请参阅本页顶部的“典型调用”:docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
    • 请不要介意,请教我什么更可取,因为我的另一种验证方法也与String.matches("regex") 一起使用,除非我非常了解它。谢谢。
    • 如果您一遍又一遍地这样做,请使用PatternMatcher。例如,如果您每次执行只执行一次,请坚持使用String.matches(s)
    • 现在编译时错误已修复,但验证结果未按预期产生..我错了什么?即使mail.google.com 也不返回true。有什么建议吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多