如何使用正则表达式匹配此字符串中的“aas”?

时间:2016-01-08 08:50:11

标签: java regex

String str = "aa(aaq(aas)ppp)eeews";

如何使用正则表达式匹配"aas"

想要匹配括号的内容,但不确定多少括号,可能会越来越多

2 个答案:

答案 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)。

为什么不使用外观?你可以,但它们总是涉及正则表达式引擎的一些额外开销。当然,使用这里的基本模式,性能不是关键,但是,最好只在必要时使用外观。

正则表达式详情:

  • \( - 匹配一个开头(
  • ([^()]*) - 捕获与()
  • 以外的零个或多个字符匹配的第1组
  • \) - 匹配结束圆括号。