如何在 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");
我需要在以下类型的字符串中用 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");