java - Matcher.group 和正则表达式 不提取完整的正则表达式

标签 java regex string matcher

我有一个字符串

String s = "adfgadfbfgadg sa 2419sfgh";

我正在尝试提取子字符串

String substring = "sa 2419sfgh"; 

使用以下正则表达式和代码的模式和匹配器。

formNumberRegex = "[al|sf|sa|sc|nrc|nrc form|doe|doe f|lsi|doe form psd f|doe al f]?[\\s\\-\\.]*[\\d]{3,6}[\\s\\-\\.]*[\\w]{1,4}";
formNumberRegexPattern = Pattern.compile(formNumberRegex);
formNumberMatcher = formNumberRegexPattern.matcher(s);

if (formNumberMatcher.find()) {
    String substring = formNumberMatcher.group();
}

但是,我只是得到

substring = "a 2419sfgh";

我的正则表达式和/或匹配器有什么问题?

最佳答案

我立即注意到:

[al|sf|sa|sc|nrc|nrc form|doe|doe f|lsi|doe form psd f|doe al f]?

应该是:

(?:al|sf|sa|sc|nrc|nrc form|doe|doe f|lsi|doe form psd f|doe al f)?

“非捕获组”(?:) 可让您避免捕获第一部分作为初始组。这样,整个表达式就是“匹配组 0”,仅此而已。

在这里测试:http://regex101.com/r/lS9dT2

关于java - Matcher.group 和正则表达式 不提取完整的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19774315/

相关文章:

java - Java中特殊链表方法的实现

java - 如何解决ClassNotFoundException : com. beust.jcommander.ParameterException

python - 将字符串与字符列表进行比较

c++ - 字符串末尾的 '\0' 是否也包含在这里?

使用堆栈的 JAVA 逆波兰表示法

java - 向导应用程序要遵循的设计或类/组件层次结构

c# 一对多字符串解析帮助使用正则表达式 lambda

objective-c - 正则表达式仅在特定字符串之后匹配

Python 2.7 中用于 HTTP GET header 的正则表达式匹配

java - 来数数。字符在字符串中出现的次数