Java正则表达式捕获特定字符串后的字符串

标签 java android regex

我需要捕获

中的“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+)

如果匹配成功,您可以通过 Matchergroup() 方法访问捕获的组:

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/

相关文章:

python - 检查两个 Python 正则表达式模式是否等效

java - 部署在Solaris服务器上时如何在Java应用程序中添加库/jar文件?

java - 根据给定值和父 ID 创建树

android - 如何将项目导入Android Studio?

c# - 正则表达式:匹配除括号内的所有单词(C#)

javascript - 用于匹配一组单词的正则表达式

java - 如何在java中创建复杂的Fluent界面?

java - 如何从 Netbeans、Java DB (Derby) 数据库导出表

android - ViewModel onChanged 获取无限循环

java - 如何从 RAW 文件夹而不是 SDCARD 加载 mp3 文件