java运用正则截取重复两个字符串之间的值
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;
}