java使用正则截取重复两个字符串之间的值

假设有段html内容如下:

 

受付番号 : 20120723-004206
注文日  : 2012年 7月 23日
  ○商品名:黄瀬涼太の笠松センパイ観察記
  ○数量 :1個
  ○価格 :\628 

受付番号 : 20120728-006047
注文日  : 2012年 7月 28日
  ○商品名:Shadow Dance
  ○数量 :1個
  ○価格 :\893 

送料    : \XXX...

 

 其实这是封邮件中内容,每行都会以\n分隔,要求用正则表达式获取每一段受付番号中的内容(另外其实也可以使用非贪婪模式.*?会进行最小匹配)。方法如下:

 

 /**
     * 截取html块
     * @return
     */
    public static List<String> getContentByEachHtml(String html){
    	List<String> htmls = null;
        //使用零宽断言(.*?中?的作用是避免贪婪匹配)

    	String regex = "(?<=" + "受付番号 :" + ")(.*?)(?=" + "(受付番号 :|送料    :)" + ")";
    	//默认正则会按\n自动截断字符,这里不能截断,需要整体HTML块,因此设定Pattern.DOTALL忽略\n截断使用整体文本
        Pattern pattern = Pattern.compile(regex,Pattern.DOTALL);
    	Matcher matcher = pattern.matcher(html);
    	while(matcher.find()){
    		if(htmls == null)
    			htmls = new ArrayList<String>();
    		htmls.add(matcher.group(1));
    	}
    	return htmls;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值