Java 正则表达式在管道字符出现n次后匹配子字符串
我正在尝试为下面的示例文本构建一个正则表达式,其中需要替换粗体文本。到目前为止,我可以做到这一点Java 正则表达式在管道字符出现n次后匹配子字符串,java,regex,Java,Regex,我正在尝试为下面的示例文本构建一个正则表达式,其中需要替换粗体文本。到目前为止,我可以做到这一点 (\\\\).*(\\\\)选择第一个和最后一个pip字符之间的整个字符串。我必须使用apache或java正则表达式 示例字符串:管道之间的文本长度可能不同 1.1|ProvCM|111111111111|**10.15.194.25**|10.100.10.3|10.100.10.1|docsis3.0 要匹配管道第n次出现后的零件,可以使用以下正则表达式: /^(?:[^|]*\|){3}(
(\\\\).*(\\\\)
选择第一个和最后一个pip字符之间的整个字符串。我必须使用apache或java正则表达式
示例字符串:管道之间的文本长度可能不同
1.1|ProvCM|111111111111|**10.15.194.25**|10.100.10.3|10.100.10.1|docsis3.0
要匹配管道第n次出现后的零件,可以使用以下正则表达式:
/^(?:[^|]*\|){3}([^|]*)/
这里n=3
它将匹配匹配组1中的10.15.194.25
您可以使用它。替换为$1
这里从字符串的开始
捕获到
,然后捕获3个这样的组并将其存储在$1
中。字符串的下一部分直到
是您想要的。现在您可以通过$1
用任何东西替换它。下面是您可以执行替换的方法:
String input = "1.1|ProvCM|111111111111|10.15.194.25|10.100.10.3|10.100.10.1|docsis3.0";
int n = 3;
String newValue = "new value";
String output = input.replaceFirst("^((?:[^|]+\\|){"+n+"})[^|]+", "$1"+newValue);
这将构建:
"1.1|ProvCM|111111111111|new value|10.100.10.3|10.100.10.1|docsis3.0"
感谢anubhava,这与10.15.194.25 | 10.100.10.3 | 10.100.10.1 | docsis3.0相匹配。我只需要10.15.194.25字符串。不,它只匹配10.15.194.25
您查看了最新的演示吗?看起来不错;java:s=s.replaceFirst(“^(?:[^ |]*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\代码>终于你有了它:p这工作得很好!但是,使用反向引用指定多个引用是否容易?说你想要第一次和第三次出现。
"1.1|ProvCM|111111111111|new value|10.100.10.3|10.100.10.1|docsis3.0"