前台傳入格式如 教師10(0010),需批量提取括號內的純數字 0010(不含括號)。
Pattern pattern = Pattern.compile("(?<=\\()(.+?)(?=\\))");
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.println(matcher.group()); // 輸出 0010
}
(?<=\\():**零寬正向後顧斷言**,斷言左側必須是 (,但不消耗字符。(.+?):非貪婪匹配任意字符(捕獲組 1),即目標內容。(?=\\)):**零寬正向先行斷言**,斷言右側必須是 ),不消耗字符。結果:matcher.group() 直接得到不帶括號的內容。
public List<String> extractBracketContent(String input) {
List<String> result = new ArrayList<>();
Pattern p = Pattern.compile("(?<=\\()(.+?)(?=\\))");
Matcher m = p.matcher(input);
while (m.find()) result.add(m.group());
return result;
}
| 語法 | 名稱 | 含義 |
|---|---|---|
(?=exp) | 正向先行斷言 | 匹配 exp 前面的位置 |
(?<=exp) | 正向後顧斷言 | 匹配 exp 後面的位置 |
(?!exp) | 負向先行斷言 | 匹配後面不是 exp 的位置 |
(?<!exp) | 負向後顧斷言 | 匹配前面不是 exp 的位置 |
