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;
    }

你可能感兴趣的:(java,正则表达式)