(?=a) 以a开始匹配
(.*?) 匹配对应的字符串
.*?中间连接,匹配任意字符到结束
(?= b) 以b结尾
例如
import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
/**
** (?<=<span>编号:) 以<span>编号: 开始
** (.*?)需要的匹配值 11
** .*? 匹配任意字符到下一个符合条件的字符 --中间连接
** (?=</span>) 以</span>结尾
*
*/
public class Test {
// private static final Pattern pattern=Pattern.compile("(?<=<span>编号:)(.*?)(?=</span>)");
//private static final Pattern pattern=Pattern.compile("(?<=<span>编号:)(.*?)(?=</span>).*?(?<=name=\"time\" value=\")(.*?)(?=\")");
//private static final Pattern pattern=Pattern.compile("(?<=<span>编号:)(.*?)(?=</span>).*?(?<=name=\"time\" value=\")(.*?)(?=\").*?(?<=<marquee title=\")(.*?)(?=\")");
private static final Pattern pattern=Pattern.compile("(?<=<span>编号:)(.*?)(?=</span>).*?(?<=name=\"time\" value=\")(.*?)(?=\").*?(?<=<marquee title=\")(.*?)(?=\").*?(?<=scrollamount=\"10\">)(.*?)(?=</marquee>)");
public static void main(String[] args) {
List<String[]> result = new ArrayList<>();
String b = "<span>编号:11</span>"
+ "<input type=\"text\" class=\"\" name=\"time\" value=\"2022-06-25 14:52:11\" /> "
+ "<marquee title=\"江苏省南京市建邺区吴侯街\" height=\"30\" align=\"left\" behavior=\"scroll\" direction=\"left\" scrolldelay=\"300\" scrollamount=\"10\">"
+ "118.698269,31.970634</marquee> ";
Matcher matcher = pattern.matcher(b);
while (matcher.find()) {
String[] row = new String[5];
// 编号
row[0] = matcher.group(1).trim();
// 时间
row[1] = matcher.group(2).trim();
// 地点
row[2] = matcher.group(3).trim();
// 经纬度
String[] geo = matcher.group(4).trim().split(",", 2);
if (geo.length == 2) {
row[3] = geo[0].trim();
row[4] = geo[1].trim();
}
result.add(row);
}
result.forEach(e -> System.out.println(Arrays.toString(e)));
}
}
输出
备注
\\d 数字
\\D 非数字
+ 表示多次并连续满足
例
Pattern pattern=Pattern.compile("\\d+\\D+")
字符串 01a022b0333cc
输出
01a
022b
0333cc