我有一个正则表达式,可以过滤所有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就好了
你应该看到这样的事情:
所以我的问题是,选择“此文本不会被选中”的最佳方法是什么? (或第一个IP之前的任何文本)
答案 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; =
表示非捕获组,尝试删除它并查看所选内容。