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

Java 如何通过匹配正则表达式来提取所有子字符串?,java,regex,string,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> 测试 试验 Id

我想提取这个字符串中所有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>
测试
试验

Idea-围绕“””字符拆分,查看每个部分是否包含属性名
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;
  }
}
String[]parts=thisString.split(\“”);//在“char”处拆分
List srctattributes=new ArrayList();
布尔值nextIsSrcAttrib=false;
用于(字符串部分:部分){
if(part.trim().endsWith(“src=”){
nextIsSrcAttrib=true{
else if(nextissrcatrib){
srctattributes.add(部分);
nextIsSrcAttrib=false;
}
}

更好的主意-将其输入到常用的html解析器中,并从所有
img
元素中提取所有
src
属性的值。但上述方法应该是一个简单的解决方案,特别是在非生产代码中。

idea-围绕“.”'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;
  }
}
String[]parts=thistring.split(\”);//在“char”处拆分
List srctattributes=new ArrayList();
布尔值nextIsSrcAttrib=false;
用于(字符串部分:部分){
if(part.trim().endsWith(“src=”){
nextIsSrcAttrib=true{
else if(nextissrcatrib){
srctattributes.add(部分);
nextIsSrcAttrib=false;
}
}

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

很抱歉没有对其进行编码(时间很短) 怎么样: 1.(假设文件大小合理)将整个文件读取为字符串。 2.拆分“src=\”周围的字符串(假设生成的数组名为strArr) 3.在结果字符串数组上循环,并将strArr[i]。子字符串(0,strArr[i]。indexOf(“\”/>”)存储到某些图像源集合

Aviad

很抱歉没有编码它(时间很短) 怎么样: 1.(假设文件大小合理)将整个文件读取为字符串。 2.拆分“src=\”周围的字符串(假设生成的数组名为strArr) 3.在结果字符串数组上循环,并将strArr[i]。子字符串(0,strArr[i]。indexOf(“\”/>”)存储到某些图像源集合


Aviad

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

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属性不是双引号的,您可能需要调整正则表达式,因为您已经请求了正则表达式实现

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属性不是双引号的,您可能需要调整正则表达式

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));
}
String data=“Test\n”+
“\n”+
“测试\n”+
“\n”+
“

”; 模式p0=Pattern.compile(“src=\”([^\“]+)\”); 匹配器m=p0.Matcher(数据); while(m.find()) { System.out.printf(“找到:%s%n”,m.group(1)); }
大多数正则表达式风格都有一个抓取所有匹配项的速记,比如Ruby的
scan
方法或.NET的
matches()
,但在Java中,您必须始终将其拼写出来。

给您:

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));
}
String data=“Test\n”+
“\n”+
“测试\n”+
“\n”+
“

”; 模式p0=Pattern.compile(“src=\”([^\“]+)\”); 匹配器m=p0.Matcher(数据); while(m.find()) { System.out.printf(“找到:%s%n”,m.group(1)); }
大多数正则表达式的风格都有一个抓取所有匹配项的速记,比如Ruby的
scan
方法或.NET的
matches()
,但在Java中,您必须始终将其拼写出来