有人可以帮我写一个正则表达式,只匹配其中没有逗号的网址。此外,对其工作方式的解释将不胜感激。
实施例 -
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
我的正则表达式只适用于第一个网址,而不适用于第二个网址。
答案 0 :(得分:0)
\/(itunes).apple.com\/(us)\/(book)\/.*\/id([0-9]+)[^,]*$
这是你的原始正则表达式,已修复(我认为存在拼写错误)并且在id之后不允许使用逗号(或者,除了逗号之前允许任何内容直到字符串的结尾)。
答案 1 :(得分:0)
你可以环顾四周
^(?!.*,).*(?<=id)(\\d+)
^
将正则表达式锚定在字符串的开头。 (?!.*,)
负面展望。确保字符串不包含任何,
.*
匹配任何零次的内容
(?<=id)
积极展望。确保以下模式中的数字由id
(\\d+)
匹配一个或多个数字。捕获第1组示例
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