【问题标题】:Java regex for special URL特殊 URL 的 Java 正则表达式
【发布时间】:2014-01-03 18:58:49
【问题描述】:

在 Java 中,我正在尝试编写一个正则表达式来匹配一种特殊的 HTTP URL:

http://<any-string-of-1-or-more-chars>/#<any-string-of-0-or-more-chars>

所以字符串有4段:

  1. 字符串文字:“http://”;那么
  2. 任何 1+ 个字符的字符串;那么
  3. 字符串文字:“/#”;那么
  4. 0+字符的任意字符串

“传递”字符串的示例:

等等。我最好的尝试是:

String regex = "http://*/#*";

但是当我尝试时:

String test = "http://example.com/#";
String regex = "http://*/#*";
if(test.matches(regex))
    System.out.println("I match!");
else
    System.err.println("I don't match!");

我哪里出错了,我的正则表达式应该是什么(以及为什么)?

【问题讨论】:

  • 正则表达式中的#*是什么意思?

标签: java regex


【解决方案1】:

在正则表达式中,如果您想匹配 1 个或多个任意字符,则使用 .+,0 个或多个使用 .*

最好通过一个好的正则表达式教程,例如:http://regular-expressions.info

你可以使用这个正则表达式:

String regex = "^https?://.+?/#.*$";

【讨论】:

  • 感谢@anubhava (+1) - 3 个后续问题:(1) 为什么要在正则表达式前面加上“^”? (2) “?”是什么意思?在“。+?”中是什么意思? (3) 你用“$”给正则表达式加上什么后缀?再次感谢!
  • 1) 最好使用行开始/结束锚点^ and $ 以确保您的匹配最准确。 2) 在.+?? 中用于使匹配不贪心或不情愿。 3) 同 1)。
  • @CalifornianAcorn 我建议您阅读建议的链接,而不是要求用勺子喂食。
  • @BoristheSpider - 当您可以众包时,为什么要让繁琐的细节陷入困境?
【解决方案2】:

任何 1 个或多个字符的字符串

这是.+,不是*

任何 0 或更多字符的字符串

这是.*,不是*

【讨论】:

  • 需要让第一个.不贪心,所以第一个应该是.+?
猜你喜欢
  • 1970-01-01
  • 2012-05-18
  • 2011-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多