java - 如何使用正则表达式来匹配该字符串中的 "aas"?

标签 java regex

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
}

参见regex demo

您需要的文本位于捕获组 1 中。请参阅 IDEONE demo 。要仅获取第一次出现,请使用 if 而不是 while

获取第一次出现的另一种方法是使用 "aa(aaq(aas)ppp)eeews".replaceAll("(?s).*?\\(([^()]*)\\).*$", "$1") ( demo ).

为什么不使用环顾四周?您可以,但它们总是会给正则表达式引擎带来一些额外的开销。当然,对于这里的基本模式,性能不是关键,但是,最佳实践是仅在必要时使用环视。

正则表达式详细信息:

  • \( - 匹配开头 (
  • ([^()]*) - 捕获组 1 匹配除 () 之外的零个或多个字符
  • \) - 匹配右圆括号。

关于java - 如何使用正则表达式来匹配该字符串中的 "aas"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34672848/

相关文章:

Python 用正则表达式解析数据变成字典。

php - 如何使用 preg_replace 将类名注入(inject) html 节点?

java - 正则表达式 foo_bar_number 为 2 个字符串 [foo_bar, number]?

regex - 使用 awk 替换大文件中每行的开始和结束

java - 使用递归在 Java 中以正确的格式打印菱形图案

java - 当元素存在于页面但在视口(viewport)中不可见时,Selenium findElement 会引发异常

java - GlassFish 服务器 HTTP 状态 404 - 未找到

java - 将默认值添加到列表/ map

java - 无法在android中获取其他textview的文本?

c++ - 如何解析包含一系列矩形数据的字符串?