Java 正则表达式未选择文本的第一个匹配项

Java 正则表达式未选择文本的第一个匹配项,java,regex,Java,Regex,我有一个正则表达式,它可以过滤文本中的所有IP地址。但是,有一个问题!它获取除前面的文本之外的所有不相关文本。例如,首先,使用此网站: 制作正则表达式: (?<=[0-9]{1,4}+\.[0-9]{1,4}+\.[0-9]{1,4}+\.[0-9]{1,4}+)([[^\n][\n]](?![0-9]{1,3}+\.[0-9]{1,3}+\.[0-9]{1,3}+\.[0-9]{1,3}+))*[[^\n]\n] (?此: ?我刚刚有了一个主意!一个非常简单的解决方案是在字符串的开头

我有一个正则表达式,它可以过滤文本中的所有IP地址。但是,有一个问题!它获取除前面的文本之外的所有不相关文本。例如,首先,使用此网站:

制作正则表达式:

(?<=[0-9]{1,4}+\.[0-9]{1,4}+\.[0-9]{1,4}+\.[0-9]{1,4}+)([[^\n][\n]](?![0-9]{1,3}+\.[0-9]{1,3}+\.[0-9]{1,3}+\.[0-9]{1,3}+))*[[^\n]\n]
(?此:

?我刚刚有了一个主意!一个非常简单的解决方案是在字符串的开头附加1.1.1.1,然后忽略我的正则表达式拆分返回的第一个IP(由godspeedlee建议的拆分-如果您想添加答案并为此要求投票,我将接受)

我怀疑您让这项工作变得比需要的困难得多。如果您只想获取所有IP地址,为什么不直接匹配它们?例如:

List<String> matchList = new ArrayList<String>();

Pattern p = Pattern.compile("\\b(?:[0-9]{1,3}\\.){3}[0-9]{1,3}\\b");
Matcher m = p.matcher(s);
while (m.find()) {
    matchList.add(m.group());
} 
List matchList=new ArrayList();
模式p=Pattern.compile(\\b(?[0-9]{1,3}\\){3}[0-9]{1,3}\\b”);
匹配器m=匹配器p;
while(m.find()){
matchList.add(m.group());
} 

我会减少您的IP模式,例如:\b(?:(?:25[0-5]| 2[0-4]\d | 1\d{2}\d?\d)\{3}(?:25[0-5]| 2[0-4]\d | 1\d{2}\d?\d)\b@godspeedlee,它捕获了所有IP,而不是IP周围的文本:(也许你可以尝试使用IP拆分字符串?@godspeedlee,这是个好主意!但我希望通过正则表达式去除多余的内容。
(?)?