[英]How can I extract all substring by matching a regular expression?
我想提取此字符串中所有src属性的值,我该怎么做:
<p>Test
<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>
干得好:
String data = "<p>Test \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));
}
大多数regex风格都有获取所有匹配项的捷径,例如Ruby的scan
方法或.NET的Matches()
,但是在Java中,您总是必须将其拼写清楚。
想法-围绕'“'字符,看一下每个部分是否包含属性名称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解析器中,并从所有img
元素中提取所有src
属性的值。 但是以上内容应该是一个简单的解决方案,尤其是在非生产代码中。
抱歉,没有对它进行编码(时间短),该怎么做:1.(假设文件大小合理)将整个文件读取为String。 2.拆分字符串arround“ src = \\”“(假定结果数组称为strArr)3.循环遍历字符串数组并存储strArr [i] .substring(0,strArr [i] .indexOf(” \\ “ />”))到一些图像源集合。
阿维亚德
由于您已请求正则表达式实现...
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属性未用双引号引起来,则可能需要调整正则表达式
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.