我需要捕获
中的“456456”Status: Created | Ref ID: 456456 | Name: dfg | Address: 123
没有空格
我得到了一个有效的正则表达式,后来发现java不支持\K。
\bRef ID:\s+\K\S+
有什么方法可以获得\K的支持吗?
或者不同的正则表达式?
任何帮助将非常感激。
最佳答案
Is there any way to get support for \K?
您可以想象使用提供它的第三方正则表达式库。您无法在标准库的 Pattern
类中获取它。
or a different regex?
我不确定您是否认识到“捕获”是正则表达式空间中的一个技术术语,与问题直接相关。这确实是处理您所描述的内容的常用方法,但是您提供的正则表达式根本不执行任何捕获。要使用 Java 正则表达式捕获所需的文本,您需要将括号放入模式中,围绕要捕获其匹配的部分:
\bRef ID:\s+(\S+)
如果匹配成功,您可以通过 Matcher
的 group()
方法访问捕获的组:
String s = "Status: Created | Ref ID: 456456 | Name: dfg | Address: 123";
Pattern pattern = Pattern.compile("\\bRef ID:\\s+(\\S+)");
Matcher matcher = pattern.matcher(s);
if (matcher.find()) {
String refId = matcher.group(1);
// ...
}
请注意,您需要将 matcher.find()
与该正则表达式一起使用,而不是 matcher.matches()
,因为后者测试整个字符串是否匹配,而前者仅测试是否存在匹配的子字符串。
关于Java正则表达式捕获特定字符串后的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37927374/