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

时间:2019-07-12 10:32:00

标签: java regex regex-group

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

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|:.*?\)$)

1 个答案:

答案 0 :(得分:1)

您可以使用

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

,并替换为$1fullName:xyz。请参见regex demoregex graph

enter image description here

详细信息

  • \b-单词边界
  • (software\s*:\s*\([^()]*)-捕获组1(替换模式中的$1是该组中捕获的值的占位符):
    • software-一个单词
    • \s*:\s*-一个:包含0+空格
    • \(-一个(字符
    • [^()]*-除()以外的0个或更多字符
  • \bname-整个词name
  • :-冒号
  • \w+-1个或多个字母,数字或下划线。

Java示例代码:

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