用于匹配重复子串的正则表达式

时间:2014-03-26 17:43:55

标签: java regex pattern-matching

我需要从HTML样式参数中获取background-image值的网址,在这个阶段我有这个常规(URL长期常规匹配有效的URL,所以我在这里省略它以简化):

background-image\s*?\:\s*?(url\(\s*?(['"])?\s*?(URL)\s*?(\2)?\s*?\)([,]?))+

它只匹配第一次出现的URL,我想我已经允许匹配所有出现次数(但显然我还没有)。我做错了什么?

输入可能如下所示:

String txt = "<div style=\"background-image: url('A'), url(B);\">fooo</div>";

以及我需要通过常规实现的目标:

  1. 检查background-image值后跟*空格,然后:(冒号)和*空格。
  2. url()模式提取所有值。
  3. 现在,我能够以url()模式获取所有值,但我无法确保存在background-image值。

1 个答案:

答案 0 :(得分:0)

你的正则表达式没问题,除了它没有搜索URL,它搜索文本URL。我已在网址后面添加了\ d来证明您的正则表达式有效:

Pattern p = Pattern.compile("background-image\\s*?\\:\\s*?(url\\(\\s*?(['\"])?\\s*?(URL\\d)\\s*?(\\2)?\\s*?\\)([,]?))+");
Matcher m = p.matcher("background-image: url(URL1); background-image: url(URL2)");
while( m.find() ){
    System.out.println(m.group(3));
}

Output: 
URL1
URL2