正则表达式不选择第一次出现的文本

时间:2012-08-03 19:45:45

标签: java regex

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

http://myregexp.com/signedJar.html

制作正则表达式:

(?<=[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但是,这个t 4.55.62.1分机的其余2.2.22.345将被选中32.4.3.1就好了

你应该看到这样的事情: http://i.imgur.com/LzZWl.png

所以我的问题是,选择“此文本不会被选中”的最佳方法是什么? (或第一个IP之前的任何文本)

3 个答案:

答案 0 :(得分:1)

我怀疑你的工作比他们需要的要困难得多。如果您只想获取所有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());
} 

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

此:     ?&lt; =

表示非捕获组,尝试删除它并查看所选内容。

相关问题