【问题标题】:Java regexp that only matches URLs without protocol and www仅匹配没有协议和 www 的 URL 的 Java 正则表达式
【发布时间】:2014-03-22 20:44:02
【问题描述】:

我需要一个相当贪婪的正则表达式,它积极匹配不以任何协议开头的字符串,例如“http://”或“ftp://”,同时不匹配以“开头的字符串” www”(当然,或者两者结合)。我对 Java 和正则表达式还很陌生,但我已经设法弥补了这个(这对我不起作用):

([\w'-]+)\.(com|info|net|org).+

但它似乎与“example.com”不匹配。它似乎与“example.com/index.php?q=somequery#something”匹配。如果字符串以一系列字符开头(在我的情况下为“www”或“http://”),我真的不明白如何创建一个不匹配的正则表达式。

感谢任何帮助。

(PS 我试图寻找这个问题的受骗者,但是我找不到与这个问题完全匹配的人。如果这是受骗者,非常抱歉。)

【问题讨论】:

  • 注意:您当前的 RegEx 将匹配 URL 中不允许的域后面的空格。此外,您的 RegEx 确实 与您的示例匹配,因此问题在于您的 Java 代码 实现 它。我的猜测是您需要在将字符串编译为 RegEx 对象之前进行双重转义。
  • @tenub 嗯......我已经在这个网站上试过了:regexr.com 并且根据那个网站它不匹配......而且它是否允许通过也没关系空格,我的实现通过空格分割了一个更大的字符串(一条聊天消息),所以我认为我至少现在不必担心这个。

标签: java regex


【解决方案1】:

您的正则表达式末尾有.+。这意味着any character except \n (1 or more times)。

但是您的样本example.com 在.com 之后没有任何内容。这就是您的正则表达式与示例不匹配的原因。

将.+ 替换为.*,它会为您工作。仅供参考.* 表示any character except \n (0 or more times)

【讨论】:

  • 谢谢,效果很好!您是否知道任何可以让您在线测试 Java 7 正则表达式的好网站? (而且可靠)
  • 你可以在这里测试你的正则表达式regex101.comJava 支持 PCRE 正则表达式。所以您可以放心使用。
猜你喜欢
  • 2017-06-21
  • 1970-01-01
  • 1970-01-01
  • 2016-07-26
  • 2011-11-25
  • 2012-02-04
  • 1970-01-01
  • 2010-09-14
  • 2014-05-07
相关资源
最近更新 更多