<!-- # 【Java】使用正则表达式匹配字符串中半角括号中间的所有内容 --> <!-- java-match-all-contents-in-brackets-with-regex --> 使用 `Pattern` 和 `Matcher` 匹配字符串中 `()` 之间的内容。示例代码如下: ```java import java.util.regex.Matcher; import java.util.regex.Pattern; System.out.println("==================== start ===================="); String ua = "Mozilla/5.0 (Linux; Android 11; M2102K1C Build/RKQ1.201112.002; wv) " + "AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/90.0.4430.210 " + "Mobile Safari/537.36 hap/1.10/xiaomi org.hapjs.mockup/1.10.0.0 " + "me.liujiajia.app.sample/1.3.1 ({\"packageName\":\"org.hapjs.mockup\"," + "\"type\":\"other\",\"extra\":{}})"; Matcher matcher = Pattern.compile("(?<=\\()[^\\)]+").matcher(ua); while (matcher.find()) { String group = matcher.group(); System.out.println(group); } System.out.println("===================== end ====================="); ``` 运行结果如下: ```bash ==================== start ==================== Linux; Android 11; M2102K1C Build/RKQ1.201112.002; wv KHTML, like Gecko {"packageName":"org.hapjs.mockup","type":"other","extra":{}} ===================== end ===================== ``` 正则表达式 `(?<=\\()[^\\)]+` 可以分为三个部分: ```bash (?<=\\()[^\\)]+ |--1---||-2--|3| ``` 1. `(?<=\\()` 2. `[^\\)]` 3. `+` 各部分的详细说明: 1. `(?<=\\()` `(?<=pattern)` 为 *反向肯定预查*,其对应的为 *正向肯定预查* `(?=pattern)` ,两者本身都不参与匹配,但是会作为匹配的一个边界,*反向肯定预查* 可以理解为 **开始边界** ,*正向肯定预查* 则是 **结束边界** 。 这里是 *反向肯定预查* ,也就是 **开始边界** , 边界值为 `\\(` ,代表了一个半角左括号,也就是说**从一个半角左括号开始匹配**。 2. `[^\\)]` `[]` 为 *中括号表达式* ,只匹配处于正则表达式中该位置的单个字符,这里为 `\\)` 也就是半角右括号(其中 `\\` 是用来转义为 `\` ,再结合 `\)` 转义为半角右括号) `^` 在 *中括号表达式* 种表示查找**不在**列表或范围内的所有字符,这里就是这种情况,表示**匹配不为 `)` 的字符**。 3. `+` `+` 表示匹配前面的子表达式一次或多次,这里表示**匹配不为 `)` 的多个字符,直到 `)` 出现**。 综上,`(?<=\\()[^\\)]+` 表示**匹配从 `(` 开始到第一个 `)` 截至的中间的所有字符**。从上面实例的打印结果可以看到成功的匹配到了三段。 Loading... 版权声明:本文为博主「佳佳」的原创文章,遵循 CC 4.0 BY-NC-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://www.liujiajia.me/2021/12/23/java-match-all-contents-in-brackets-with-regex 提交