对html字符串中的src进行替换

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class Test {
/** 
     * @param args 
     */  
    public static void main(String[] args) {  
        // TODO Auto-generated method stub  
//      String htmlStr = "<b><font www=\"red\" pp='oo'>aaaaa</font><font www=\"red\" pp='oo'>aaaaa</font></b> ";  
        String htmlStr = "<p><span><img  src=\'http://imagesv5.vivame.cn/pic/upload/phote/201511/07516786-7d60-4ca5-ad11-b6c8bb82d99d.jpg\' border=0></span></p><p><span>"
        + "    <img  src=\'http://imagesv5.vivame.cn/pic/upload/phote/201511/07516786-7d60-4ca5-ad11-b6c8bb82d99d.jpg\' border=0></span></p>"
        + "<p><span><img  src=\'http://imagesv5.vivame.cn/pic/upload/phote/201511/07516786-7d60-4ca5-ad11-b6c8bb82d99d.jpg\' border=0></span></p> ";  
        System.out.println("zyj  "+Test.updateHtmlTag(htmlStr, "img", "src","http://www.redirect.com/xxx?url=\""));  
  
    }  
      
    /**   
     * @param htmlStr  html文本   
     * @param searchTag  要修改的目标标签  
     * @param searchAttrib  目标标签中的属性  
     * @param newStr  修改值       
     */    
    public static String updateHtmlTag(String htmlStr, String searchTag,     
        String searchAttrib,String newStr) {  
//      String regxpForTag = "<\\s*img\\s+([^>]*)\\s*>"; // 找出IMG标签
//     String regxpForTagAttrib = "src=\"([^\"]+)\""; // 找出IMG标签的SRC属性
    String regxpForTag ="<\\s*" + searchTag + "\\s+([^>]*)\\s*>";      
         String regxpForTagAttrib = searchAttrib + "\\s*=\\s*[\"|']([^\"|']+)[\"|']";     
        Pattern patternForTag = Pattern.compile(regxpForTag);     
        Pattern patternForAttrib = Pattern.compile(regxpForTagAttrib);     
        Matcher matcherForTag = patternForTag.matcher(htmlStr);     
        StringBuffer sb = new StringBuffer();     
        boolean result = matcherForTag.find();     
        while (result) {     
            StringBuffer sbreplace = new StringBuffer("<"+searchTag +" ");   
            System.out.println(matcherForTag.group(1));  
            Matcher matcherForAttrib = patternForAttrib.matcher(matcherForTag     
                    .group(1));     
              
            if (matcherForAttrib.find()) {  
                System.out.println(matcherForAttrib.group(1));  
                matcherForAttrib.appendReplacement(sbreplace, searchAttrib+"=\""+newStr);     
            }     
//            matcherForTag.appendReplacement(sb, sbreplace.toString());    
            matcherForAttrib.appendTail(sbreplace);   
            matcherForTag.appendReplacement(sb, sbreplace.toString()+">");  
            result = matcherForTag.find();     
        }     
        matcherForTag.appendTail(sb);     
        return sb.toString();     
    }     

}

注意  :
matcher.appendReplacement()与matcher.appendTail()的区别:
简单的讲讲,用matcher.appendReplacement(?sb, "b")就是在Matcher.find()找到匹配的地方用“b”替换掉然后加进StringBuffer中去,这时后面可能还有字符串但是不匹配的,就像例子中@163.com是匹配到最后一个a结束的地方如果这时输出就是bbcbbcb。?matcher.appendTail()就是把@163.com加上而已

package com.it.test;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class regex_test2 {

public static void main(String args[]) {

String mail = "abcabcA@163.com";

Pattern pattern = Pattern.compile("a",Pattern.CASE_INSENSITIVE);

Matcher m = pattern.matcher(mail);

StringBuffer sb = new StringBuffer();

while(m.find())

m.appendReplacement(sb, "b");

//m.appendTail(sb);//注视掉这句的结果是bbcbbcb

System.out.println(sb.toString()); //不注释掉上句的结果是bbcbbcb@163.com

}

}


1.find()方法是部分匹配,是查找输入串中与模式匹配的子串,如果该匹配的串有组还可以使用group()函数。

matches()是全部匹配,是将整个输入串与模式匹配,如果要验证一个输入的数据是否为数字类型或其他类型,一般要用matches()。

 

2.Pattern pattern= Pattern.compile(".*?,(.*)");

    Matcher matcher = pattern.matcher(result);

  if (matcher.find()) {
   return matcher.group(1);
  }

 

3.详解:

matches
public static boolean matches(String regex,  CharSequence input)

编译给定正则表达式并尝试将给定输入与其匹配。  
调用此便捷方法的形式  
Pattern.matches(regex, input);
Pattern.compile(regex).matcher(input).matches() ; 
如果要多次使用一种模式,编译一次后重用此模式比每次都调用此方法效率更高。
参数:
regex - 要编译的表达式
input - 要匹配的字符序列  
抛出:  
PatternSyntaxException - 如果表达式的语法无效

find
public boolean find()尝试查找与该模式匹配的输入序列的下一个子序列。  
此方法从匹配器区域的开头开始,如果该方法的前一次调用成功了并且从那时开始匹配器没有被重置,则从以前匹配操作没有匹配的第一个字符开始。  
如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息。  

matcher.start() 返回匹配到的子字符串在字符串中的索引位置. 
matcher.end()返回匹配到的子字符串的最后一个字符在字符串中的索引位置. 
matcher.group()返回匹配到的子字符串 
返回:
当且仅当输入序列的子序列匹配此匹配器的模式时才返回 true。


4.部分JAVA正则表达式实例

   ①字符匹配 
   Pattern p = Pattern.compile(expression); // 正则表达式 
   Matcher m = p.matcher(str); // 操作的字符串 
   boolean b = m.matches(); //返回是否匹配的结果 
   System.out.println(b); 

   Pattern p = Pattern.compile(expression); // 正则表达式 
   Matcher m = p.matcher(str); // 操作的字符串 
   boolean b = m. lookingAt (); //返回是否匹配的结果 
   System.out.println(b); 

   Pattern p = Pattern.compile(expression); // 正则表达式 
   Matcher m = p.matcher(str); // 操作的字符串 
   boolean b = m..find (); //返回是否匹配的结果 
   System.out.println(b); 


②分割字符串 
Pattern pattern = Pattern.compile(expression); //正则表达式 
                     String[] strs = pattern.split(str); //操作字符串 得到返回的字符串数组 

③替换字符串 
   Pattern p = Pattern.compile(expression); // 正则表达式 
   Matcher m = p.matcher(text); // 操作的字符串 
   String s = m.replaceAll(str); //替换后的字符串 

④查找替换指定字符串 
Pattern p = Pattern.compile(expression); // 正则表达式 
   Matcher m = p.matcher(text); // 操作的字符串 
   StringBuffer sb = new StringBuffer(); 
   int i = 0; 
   while (m.find()) { 
    m.appendReplacement(sb, str); 
    i++;    //字符串出现次数 
   } 
   m.appendTail(sb);//从截取点将后面的字符串接上 
String s = sb.toString(); 
⑤查找输出字符串 
Pattern p = Pattern.compile(expression); // 正则表达式 
   Matcher m = p.matcher(text); // 操作的字符串 
   while (m.find()) { 
matcher.start() ;
matcher.end();
matcher.group(1);
  }




  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值