1

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

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 ext 的其余 2.2.22.345 将被选择 32.4.3.1 就好了

您应该看到如下内容: http://i.imgur.com/LzZWl.png

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

4

3 回答 3

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());
} 
于 2012-08-04T02:02:06.407 回答
0

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

于 2012-08-03T22:44:42.090 回答
-1

这个:?<=

表示非捕获组,尝试删除它并查看选择了什么。

于 2012-08-03T21:07:52.830 回答