String str = "aa(aaq(aas)ppp)eeews";
如何使用正则表达式来匹配“aas”
?
想匹配括号里的内容,但不确定括号里有多少个,可能会越来越多
最佳答案
由于您需要匹配括号内没有 (
或 )
的文本,因此您可以使用
String str = "aa(aaq(aas)ppp)eeews";
String rx = "\\(([^()]*)\\)";
Pattern ptrn = Pattern.compile(rx);
Matcher m = ptrn.matcher(str);
while (m.find()) {
System.out.println(m.group(1)); // => aas
}
您需要的文本位于捕获组 1 中。请参阅 IDEONE demo 。要仅获取第一次出现,请使用 if
而不是 while
。
获取第一次出现的另一种方法是使用 "aa(aaq(aas)ppp)eeews".replaceAll("(?s).*?\\(([^()]*)\\).*$", "$1")
( demo ).
为什么不使用环顾四周?您可以,但它们总是会给正则表达式引擎带来一些额外的开销。当然,对于这里的基本模式,性能不是关键,但是,最佳实践是仅在必要时使用环视。
正则表达式详细信息:
\(
- 匹配开头(
([^()]*)
- 捕获组 1 匹配除(
或) 之外的零个或多个字符
\)
- 匹配右圆括号。
关于java - 如何使用正则表达式来匹配该字符串中的 "aas"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34672848/