在实际处理字符串的时候我们可能需要替换掉其中的的一些特定的内容比如在web开发中,如果我们允许他们定制自己的页面,但用户提交的数据信息中如果包含<script >,javascript:等数据的话我想应该是比较危险的一些事情。为此我们可能需要禁止用户的这种行为,或者使用默认的替换方案来替换掉用户提交的这类数据中的特定的内容,当然实现的方法是有多种的,比如,遍历搜寻,然后替换,或者选择正则表达式等。我这里主要列举如何使用正则表达式的情况:
[code] /**
* 这个方法主要用来按照pattern搜索匹配的内容
* @param pattern 需要满足的匹配的样式
* @param repStr 需要替换的字符串
* @param repPat 替换规则描述:也就是如何替换repStr中的内容
* @return 返回经过替换处理后的字符串
*/
public static String replaceStr(String patternStr,String repStr,String repPat){
String res = null;
try{
pattern = compiler.compile(patternStr,Perl5Compiler.CASE_INSENSITIVE_MASK);
PatternMatcher matcher = new Perl5Matcher();
res = Util.substitute(matcher,pattern,
new Perl5Substitution(repPat,Perl5Substitution.INTERPOLATE_ALL),
repStr,
Util.SUBSTITUTE_ALL);
//matcher.getMatch()
}catch(MalformedPatternException e){
//如果出现异常则返回null结果,表示一种不可知状态
res = null;
System.out.println("Error occur:"+e.getMessage());
}
return res;
}[/code]
测试上面方法的时候我们可以这样进行
[code]res = replaceStr("(.*)(java)(.*)","I just know java only...","$1a$3");
System.out.println(res);[/code]
这里对patternStr做个简单的解释:()是分组符号,(.*)(java)(.*)连起来的意思就是我们把需要搜寻的字符串内容分成了三组($1,$2,$3)第一和三组是(.*)表示匹配任意字符0或者多次,(java)表示匹配字符java;方法中的$1a$3就表示我们要替换掉$2为 a其他组的内容不变,这只是一个简单的字符串替换方案,如果你要使用oro,更为详细的信息可参阅它的元代码
[code] /**
* 这个方法主要用来按照pattern搜索匹配的内容
* @param pattern 需要满足的匹配的样式
* @param repStr 需要替换的字符串
* @param repPat 替换规则描述:也就是如何替换repStr中的内容
* @return 返回经过替换处理后的字符串
*/
public static String replaceStr(String patternStr,String repStr,String repPat){
String res = null;
try{
pattern = compiler.compile(patternStr,Perl5Compiler.CASE_INSENSITIVE_MASK);
PatternMatcher matcher = new Perl5Matcher();
res = Util.substitute(matcher,pattern,
new Perl5Substitution(repPat,Perl5Substitution.INTERPOLATE_ALL),
repStr,
Util.SUBSTITUTE_ALL);
//matcher.getMatch()
}catch(MalformedPatternException e){
//如果出现异常则返回null结果,表示一种不可知状态
res = null;
System.out.println("Error occur:"+e.getMessage());
}
return res;
}[/code]
测试上面方法的时候我们可以这样进行
[code]res = replaceStr("(.*)(java)(.*)","I just know java only...","$1a$3");
System.out.println(res);[/code]
这里对patternStr做个简单的解释:()是分组符号,(.*)(java)(.*)连起来的意思就是我们把需要搜寻的字符串内容分成了三组($1,$2,$3)第一和三组是(.*)表示匹配任意字符0或者多次,(java)表示匹配字符java;方法中的$1a$3就表示我们要替换掉$2为 a其他组的内容不变,这只是一个简单的字符串替换方案,如果你要使用oro,更为详细的信息可参阅它的元代码