2013-05-10 30 views
0

我需要选择一小部分字符串。选择此字符串的某个部分

下面是一个例子字符串:http://itunes.apple.com/app/eyelashes/id564783832?uo=5

我需要:564783832

几件事情要记住:

  • 数量将始终id前面(即id564783832
  • 可能有或可能没有?uo=5后面的数字(也可能是除之外的其他参数)
  • 我需要可以是不同的长度的字符串(不总是9位数字)
  • 前述id将具有类似的格式(同#斜线的,但文本的文本将是不同的)

这将最终用Ruby来实现。

+0

可能还有其他的东西在ID前面? – 2013-05-10 16:32:57

+2

这是一个:'(tool)?|(language)?|(yourcodes)?' – Kent 2013-05-10 16:33:33

+0

@Kent:Sorry,post updated。我正在使用Ruby。 – Shpigford 2013-05-10 16:36:18

回答

2

不知道你的语言/工具,只是假设看后面被支持。

'(?<=id)\d+' 
+0

你也许想检查结束,这可能是可能的 - 'itunes.apple.com/app/abcid1234/id12498761' – Dukeling 2013-05-10 16:37:05

+0

然后我假设OP想要两个数字。 (基于Keep记住列表):)这两个数字(后面的id)都与该列表中的条件相匹配。 – Kent 2013-05-10 16:41:25

+0

**我**会猜测OP只想要最后一个,但这只是我的看法。 – Dukeling 2013-05-10 16:43:20

0

可以比拟的通过“ID”开头的数字有些序列 - 这是假定这些都是由“ID”开头的数字的唯一序列:

(?<=id)\d++ 

测试用例在Java中:

public static void main(String[] args) { 
    String input = "http://itunes.apple.com/app/eyelashes/id564783832?uo=5"; 
    Pattern pattern = Pattern.compile("(?<=id)\\d++"); 
    Matcher matcher = pattern.matcher(input); 
    while (matcher.find()) { 
     System.out.println(matcher.group()); 
    } 
} 

输出

564783832 
0

这里是我的:

[\w\/]+id(\d+)(\?|$)