String str = "aa(aaq(aas)ppp)eeews";
如何使用正则表达式匹配"aas"
?
想要匹配括号的内容,但不确定多少括号,可能会越来越多
答案 0 :(得分:1)
(?<=\\()[^()]*(?=\\))
(?<=\\()
- 检查是否存在左括号的正面观察[^()]
- 一个字符,不是结束或开括号。您不希望使用右括号,因此您不需要匹配多个。你不想要打开括号,因为你想要最内层。*
- 重复上述零次或多次(?=\\))
- 检查是否存在结束括号答案 1 :(得分:1)
由于您需要匹配内部没有(
或)
的括号内的文字,您可以使用
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
}
请参阅regex demo
您需要的文字位于Capture组1中。请参阅IDEONE demo。要仅获得第一次出现,请使用if
代替while
。
获得第一次出现的另一种方法是使用"aa(aaq(aas)ppp)eeews".replaceAll("(?s).*?\\(([^()]*)\\).*$", "$1")
(demo)。
为什么不使用外观?你可以,但它们总是涉及正则表达式引擎的一些额外开销。当然,使用这里的基本模式,性能不是关键,但是,最好只在必要时使用外观。
正则表达式详情:
\(
- 匹配一个开头(
([^()]*)
- 捕获与(
或)
\)
- 匹配结束圆括号。