【问题标题】:Extract number from an URL regex java从 URL 正则表达式 java 中提取数字
【发布时间】:2013-12-20 16:11:31
【问题描述】:

我需要从 URL 中提取最后一个数字,后跟一个破折号。

例子:

http://www.example.com/p-test-test1-a-12345.html

我需要使用正则表达式提取 12345。

我试过这个-\d(.*?).html 这让我2345 不知道为什么它会删除 1 任何想法?

【问题讨论】:

  • 你认为\d 会匹配什么?
  • 您使用的是哪种技术:分组或模式和匹配器。

标签: java regex


【解决方案1】:

它会删除第一个数字,因为您的模式无效它会捕获 -digit 之后的所有内容

-\d(.*?).html

-\d - 匹配破折号后跟一个数字

(.*?) - 捕获任何字符(换行除外)0 次或更多次,直到满足下一个标记

. - 匹配任何字符(换行除外)

html - 匹配 html


试试这个模式:

图案

(?<=-)\d+(?=\.html)

【讨论】:

    【解决方案2】:

    您必须将\d 添加到组:-(\d.*?).html

    如果只能是数字,那么-(\d+)\.html 更好。

    【讨论】:

    • 它将匹配任何数字,后跟!html
    【解决方案3】:

    试试这个:

    String pattern2 = ".*?(\\d+)\\.html";
    System.out.println(s.replaceAll(pattern2, "$1"));
    

    【讨论】:

      【解决方案4】:

      您正在寻找一个破折号,然后是一个数字,然后捕获“.html”之前的所有字符,这就是没有捕获 1 的原因。

      试试这个:

      -(\d+)\.html

      【讨论】:

      • 没有必要让+变得不贪婪。
      • @M42 你说的很对。我想这就是我编辑现有代码而没有正确考虑时会发生的情况。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-24
      • 2018-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多