Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式在管道字符出现n次后匹配子字符串_Java_Regex - Fatal编程技术网

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"