正则表达式只选择不以逗号结尾的URL

时间:2015-04-24 14:54:28

标签: java regex

有人可以帮我写一个正则表达式,只匹配其中没有逗号的网址。此外,对其工作方式的解释将不胜感激。

实施例 -

1。)https://itunes.apple.com/us/book/a-way-home/id982665320?mt=11

2。)http://itunes.apple.com/us/book/dont-turn-around/id981698737?mt=11,

我正在使用的正则表达式:

.*//(itunes).apple.com/(us)/(book).*id([0-9]+).*

预期输出 -

itunesusbook981698737

我的正则表达式只适用于第一个网址,而不适用于第二个网址。

2 个答案:

答案 0 :(得分:0)

\/(itunes).apple.com\/(us)\/(book)\/.*\/id([0-9]+)[^,]*$

这是你的原始正则表达式,已修复(我认为存在拼写错误)并且在id之后不允许使用逗号(或者,除了逗号之前允许任何内容直到字符串的结尾)。

答案 1 :(得分:0)

你可以环顾四周

^(?!.*,).*(?<=id)(\\d+)
  • ^将正则表达式锚定在字符串的开头。
  • (?!.*,)负面展望。确保字符串不包含任何,

  • .*匹配任何零次的内容

  • (?<=id)积极展望。确保以下模式中的数字由id

  • 提供
  • (\\d+)匹配一个或多个数字。捕获第1组

Regex Demo

示例

String str1 = "https://itunes.apple.com/us/book/a-way-home/id982665320?mt=11";

Pattern pattern = Pattern.compile("^(?!.*,).*(?<=id)(\\d+)");
Matcher matcher = pattern.matcher(str1);

if ( matcher.find() )
    System.out.println("itunesusbook"+matcher.group(1));
    // Output
    // => itunesusbook982665320