У меня есть рисунок как: <[a-zA-Z][^>]*(?:poster|src)=(['\"])([^'\"]+)\\1[^>]*>
здесь я хочу заменить значение атрибутов src или poster.Регулярное выражение заменить две группы
Это ОКЕЙ для
<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' />
}
}
Есть ли у кого-нибудь идеи, как это сделать?
Попробуйте посмотреть здесь: [Java Regex] (http://www.vogella.com/articles/JavaRegularExpressions/article.html) – Justin
Я бы не рекомендовал использовать регулярные выражения, когда вы занимаетесь структурой языка, а не точное представление как текст. То есть вы разбираете диалект XML, а в XML порядок атрибутов не имеет значения - но регулярные выражения не могут легко представить «порядок не имеет значения». Используйте настоящую библиотеку XML, ее очень много. – drquicksilver
Они не могут легко, но все же, они могут. Lookaheads и условное регулярное выражение - это два инструмента, которые можно использовать для достижения таких целей. – Loamhoof