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