android java,regex条件替换匹配的子内容(比如javascript';s str.replace(pattern,function(){})
需要使用正则表达式在Java中进行条件替换(如果使用javascript进行替换,请参见下面的示例)。找不到使用Java进行替换的简单方法。有人知道在Java中是否有等效的函数/回调函数进行替换吗 问题是在Android上,它需要找到一个img标记与其中的某个标记匹配,如果找到该标记,则需要修改src部分。问题是img标记可能也有不同的属性,它们应该保留。它们可能位于img标记内的随机位置。src未知,但只知道它应该是mod化了。 因此,它在img标记中查找token属性并修改其中的src部分 (img attribute1token=“这是标记”style=“width:100px;…”src=”http://......“someOtherAttributes/) 或 (imgsrc=”http://......“attribute1token=”这是令牌“someOtherAttributes style=“width:100px;…”/) 结果只会修改src,如 (imgsrc=”http://....../pathabc“attribute1 token=”这是token“someOtherAttributes style=“width:100px;…”/) 在javascript中,您可能需要这样做android java,regex条件替换匹配的子内容(比如javascript';s str.replace(pattern,function(){}),java,android,regex,callback,Java,Android,Regex,Callback,需要使用正则表达式在Java中进行条件替换(如果使用javascript进行替换,请参见下面的示例)。找不到使用Java进行替换的简单方法。有人知道在Java中是否有等效的函数/回调函数进行替换吗 问题是在Android上,它需要找到一个img标记与其中的某个标记匹配,如果找到该标记,则需要修改src部分。问题是img标记可能也有不同的属性,它们应该保留。它们可能位于img标记内的随机位置。src未知,但只知道它应该是mod化了。 因此,它在img标记中查找token属性并修改其中的src部分
var passedInToken = "this is the token";
var srcPath = "/pathabc";
var regex = new RegExp("(?:<img\\s)([^<]*)(?:token=\""+passedInToken+"\"\\s*)([^>]*)>", "gi");
var foundToken = regex.test(testSourceHtmlString);
if (foundToken) {
var testSourceHtmlString = testSourceHtmlString.replace(regex, function(matchStr, grp1, grp2){
var attributeStrToBeReserved = grp1+" "+grp2;
var findSrcRegex = new RegExp("(src=\".*?\")");
if (findSrcRegex.test(attributeStrToBeReserved)){
attributeStrToBeReserved = attributeStrToBeReserved.replace(srcRegex, function(match, g1){
return g1 + srcPath;
});
}
return "<img token=\""+passedInToken+"\""+attributeStrToBeReserved+">";
});
}
var passedInToken=“这是令牌”;
var srcPath=“/pathabc”;
var regex=新的RegExp(“(?:”;
});
}
看起来使用matcher可能有助于达到同样的效果。有更好的方法吗
String passedInToken = "this is the token";
String srcPath = "/pathabc";
StringBuffer sb = new StringBuffer();
String srcPatternString = "(src=\".*?\")";
Pattern srcPattern = Pattern.compile(srcPatternString);
String patternString = "(?:<img\\s)([^<]*)(?:token=\""+passedInToken+"\"\\s*)([^>]*)>";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(htmlStr);
while(matcher.find()) {
String srcPart = matcher.group(1) + " " + matcher.group(2);
StringBuffer srcSb = new StringBuffer();
Matcher strMatcher = srcPattern.matcher(srcPart);
while (strMatcher.find()) {
strMatcher.appendReplacement(srcSb, strMatcher.group(1)+ srcPath);
}
strMatcher.appendTail(srcSb);
String srcStr = "<img \"" + srcSb.toString() + ">";
matcher.appendReplacement(sb, srcStr);
}
matcher.appendTail(sb);
String newHtmlStr = sb.toString();
String passedInToken=“这是令牌”;
字符串srcPath=“/pathabc”;
StringBuffer sb=新的StringBuffer();
字符串srcPatternString=“(src=\”*?\””;
Pattern srcPattern=Pattern.compile(srcPatternString);
字符串模式字符串=“(?:”;
匹配器更换(sb、srcStr);
}
(某人);
字符串newHtmlStr=sb.toString();
看起来使用matcher可能有助于达到同样的效果。有更好的方法吗
String passedInToken = "this is the token";
String srcPath = "/pathabc";
StringBuffer sb = new StringBuffer();
String srcPatternString = "(src=\".*?\")";
Pattern srcPattern = Pattern.compile(srcPatternString);
String patternString = "(?:<img\\s)([^<]*)(?:token=\""+passedInToken+"\"\\s*)([^>]*)>";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(htmlStr);
while(matcher.find()) {
String srcPart = matcher.group(1) + " " + matcher.group(2);
StringBuffer srcSb = new StringBuffer();
Matcher strMatcher = srcPattern.matcher(srcPart);
while (strMatcher.find()) {
strMatcher.appendReplacement(srcSb, strMatcher.group(1)+ srcPath);
}
strMatcher.appendTail(srcSb);
String srcStr = "<img \"" + srcSb.toString() + ">";
matcher.appendReplacement(sb, srcStr);
}
matcher.appendTail(sb);
String newHtmlStr = sb.toString();
String passedInToken=“这是令牌”;
字符串srcPath=“/pathabc”;
StringBuffer sb=新的StringBuffer();
字符串srcPatternString=“(src=\”*?\””;
Pattern srcPattern=Pattern.compile(srcPatternString);
字符串模式字符串=“(?:”;
匹配器更换(sb、srcStr);
}
(某人);
字符串newHtmlStr=sb.toString();
如果有一个规范的SO答案,讨论使用正则表达式处理HTML/XML的危险。如果只有一个规范的SO答案,讨论使用正则表达式处理HTML/XML的危险。