求助: Java 如何用正则表达式提取[[ ]]之中的内容?

2019-10-04 09:33:04 +08:00
 A01514035

现有字符串“mSurface=Surface(name=com.[[letter]]bbk.launcher2/com.[[bbk]].launcher2.Launcher)”。如何提取出 letter 和 bbk? 我的正则表达式是“\[{2}(\w+)\]{2}”,提取出来的是[letter]和[bbk],多了一对中括号,请问该如何写这个正则表达式?

3643 次点击
所在节点    程序员
12 条回复
pkookp8
2019-10-04 09:35:41 +08:00
不懂 java,但我猜这是一个数组,取下标 0 ?
Newyorkcity
2019-10-04 09:49:14 +08:00
A01514035
2019-10-04 09:50:22 +08:00
@pkookp8 匹配出来的是一个 string 类型的数组,每个数组的值是一个 string,这个 string 就是带[]的,还是正则表达式写的有问题。你会其他语言的正则表达式吗,不一定是 java 的。因为正则表达式都是通用的。
mrsatangel
2019-10-04 10:01:58 +08:00
(?<=\[{2})\w+?(?=\]{2})
nifury
2019-10-04 10:06:05 +08:00
```java
var str = "mSurface=Surface(name=com.[[letter]]bbk.launcher2/com.[[bbk]].launcher2.Launcher)";
var pattern = Pattern.compile("\\[{2}(\\w+)\\]{2}");
var matcher = pattern.matcher(str);
while (matcher.find()) {
System.out.println(matcher.group(1));
}
```
正常的呀……大概你的正则没有转义?
pkookp8
2019-10-04 10:07:49 +08:00
@A01514035 就是因为正则看起来没问题,所以我才瞎猜
redeemer1001
2019-10-04 10:09:07 +08:00
我想不懂为什么会出来带有[]的结果,如果你是提取分组内的内容。
但你可以试试这个
(?<=\[{2})\w+(?=\]{2})
ysc3839
2019-10-04 10:47:29 +08:00
\[\[(.+?)\]\]
这样不行吗?
https://regex101.com/r/0IXbjg/1
godoway
2019-10-04 11:21:37 +08:00
零宽断言啊,#4,#7 都正解
A01514035
2019-10-04 11:46:35 +08:00
@mrsatangel 你好,运行出来的是 ette 和 b
```
public static List<String> getMsg(String msg) {

List<String> list = new ArrayList<String>();
Pattern p = Pattern.compile("(?<=\\[{2})\\w+?(?=\\]{2})");
Matcher m = p.matcher(msg);
while (m.find()) {
list.add(m.group(0).substring(1, m.group().length() - 1));
}
return list;
}

public static void main(String[] args) throws Exception {
String msg = "mSurface=Surface(name=com.[[letter]]bbk.launcher2/com.[[bbk]].launcher2.Launcher)";
List<String> list = getMsg(msg);
for (String s:list){
System.out.println(s);

}

}
```
@redeemer1001
@godoway
A01514035
2019-10-04 12:15:14 +08:00
解决了,是我字符串截取有问题,正则表达式确实没有错误。感谢各位。
oneisall8955
2019-10-04 15:59:09 +08:00
取出 matcher.group(1)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/606237

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX