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

标签 java regex

我有一个正则表达式,可以过滤文本的所有 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,但是,此 4.55.62.1 ext 的其余 2.2.22.345 将被选择 32.4.3.1 就好了

您应该看到类似这样的内容: http://i.imgur.com/LzZWl.png

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

最佳答案

我怀疑你让这项工作变得比需要的更加困难。如果你只是想抓取所有的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());
} 

关于java - 正则表达式不选择第一次出现的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11802312/

相关文章:

java - Spring Boot 的 CORS 不在响应 header 中

java - 面临从基于 Spring Boot 的 Java 应用程序读取 Amazon SQS 队列的问题

java - 确定单元测试的内容和不测试的内容

html - 否定词与正则表达式的匹配

Java 正则表达式不会返回捕获组

regex - Sublime regex 用捕获组替换合并替换文本

java - 以毫秒精度在 Hibernate 中存储日期

java - 使用 Java 接口(interface)来表示名词和形容词是否正确?

regex - 删除所有制表符、空白/换行、空行、多个连续空格(单个空格字符除外)

javascript - 使用 RegEx 和 w/o Eval() 递归查找数字的数字之和