如何通过匹配正则表达式提取所有子字符串?

时间:2011-02-28 07:49:02

标签: java regex string

我想要在这个字符串中提取所有src属性的值,我该怎么做:

<p>Test&nbsp;
<img alt="70" width="70" height="50" src="/adminpanel/userfiles/image/1.jpg" />
Test 
<img alt="70" width="70" height="50" src="/adminpanel/userfiles/image/2.jpg" />
</p>

4 个答案:

答案 0 :(得分:3)

你走了:

String data = "<p>Test&nbsp;\n" +
    "<img alt=\"70\" width=\"70\" height=\"50\" src=\"/adminpanel/userfiles/image/1.jpg\" />\n" +
    "Test \n" +
    "<img alt=\"70\" width=\"70\" height=\"50\" src=\"/adminpanel/userfiles/image/2.jpg\" />\n" +
    "</p>";
Pattern p0 = Pattern.compile("src=\"([^\"]+)\"");
Matcher m = p0.matcher(data);
while (m.find())
{
  System.out.printf("found: %s%n", m.group(1));
}

大多数正则表达式都有抓取所有匹配的简写,例如Ruby的scan方法或.NET的Matches(),但在Java中你总是需要拼写出来。

答案 1 :(得分:0)

想法 - 围绕'''char分开,如果它包含属性名src,请查看每个部分,如果是,则存储下一个值,即src属性。

String[] parts = thisString.split("\"");  // splits at " char
List<String> srcAttributes = new ArrayList<String>();
boolean nextIsSrcAttrib = false;
for (String part:parts) {
  if (part.trim().endsWith("src=") {
    nextIsSrcAttrib = true; {
  else if (nextIsSrcAttrib) {
    srcAttributes.add(part);
    nextIsSrcAttrib = false;
  }
}

更好的主意 - 将其提供给通常的html解析器,并从所有src元素中提取所有img属性的值。但上述内容应该是一种简单的解决方案,尤其是在非生产代码中。

答案 2 :(得分:0)

抱歉不编码(时间不够) 怎么样: 1.(假设文件大小合理)将整个文件读取为String。 2.拆分String arround“src = \”“(假设生成的数组名为strArr) 3.遍历生成的字符串数组并将strArr [i] .substring(0,strArr [i] .indexOf(“\”/&gt;“))存储到某些图像源集合中。

阿维亚德

答案 3 :(得分:0)

因为您已经请求了正则表达式实现...

import java.util.regex.Matcher; 
import java.util.regex.Pattern;

public class Test {
    private static String input = "....your html.....";

    public static void main(String[] args) {
        Pattern pattern = Pattern.compile("src=\".*\"");
        Matcher matcher = pattern.matcher(input);
        while (matcher.find()) {
            System.out.println(matcher.group());
        }

    } 
}

如果你的src属性不是双引号,你可能需要调整正则表达式