我有这样的模式:<[a-zA-Z][^>]*(?:poster|src)=(['\"])([^'\"]+)\\1[^>]*>
在这里我想替换 src 或海报属性的值。
没关系
<video src='srcVal' />
和
<video poster='posterVal' src='srcVal' />
但对于
<video poster='posterVal' src='srcVal' />
仅更改 src 值,因为matcher.group(2)
仅返回srcVal
.
public class Test {
public static void main(String[] args) throws Exception {
String html = "<video poster='posterVal' src='srcVal' />";
Pattern resourcePattern = Pattern.compile("<[a-zA-Z][^>]*(?:poster|src)=(['\"])([^'\"]+)\\1[^>]*>");
Matcher matcher = resourcePattern.matcher(html);
int last = 0;
StringBuilder sb = new StringBuilder();
while(matcher.find()) {
String path = matcher.group(2) + "Changed";
sb.append( html.substring(last, matcher.start(2)) + path );
last = matcher.end(2);
}
sb.append(html.substring(last));
System.out.println(sb);
//outputs <video poster='posterVal' src='srcValChanged' />
//expecting <video poster='posterValChanged' src='srcValChanged' />
}
}
有没有人知道如何做到这一点?