如何在 Java 中使用正则表达式组

How to use regex groups in Java

我需要在以下类型的字符串中用 fullName 替换字符串 'name':

software : (publisher:abc and name:oracle)

这需要替换为:

software : (publisher:abc and fullName:xyz)

现在,基本上,"name:xyz" 部分可以出现在括号内的任何位置。例如

software:(name:xyz)

我正在尝试使用组,我构建的正则表达式看起来是:

(\bsoftware\s*?:\s*?\()((.*?)(\s*?(and|or)\s*?))(\bname:.*?\)\s|:.*?\)$)

您可以使用

\b(software\s*:\s*\([^()]*)\bname:\w+

并替换为 fullName:xyz。见 regex demo and the regex graph:

详情

  • \b - 单词边界
  • (software\s*:\s*\([^()]*) - 捕获组 1(替换模式中的 </code> 是该组中捕获的值的占位符): <ul> <li><code>software - 一句话
  • \s*:\s* - 包含 0+ 个空格的 :
  • \( - 一个 ( 字符
  • [^()]* - ()
  • 以外的 0 个或更多字符
  • \bname - 整个单词 name
  • : - 冒号
  • \w+ - 1 个或多个字母、数字或下划线。
  • Java示例代码:

    String result = s.replaceAll("\b(software\s*:\s*\([^()]*)\bname:\w+", "fullName:xyz");