有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有一个正则表达式,它可以过滤文本中的所有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文本的其余2.2.22.345将被选择32.4.3.1即可

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

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


共 (3) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

    这: ?<;=

    表示未捕获组,请尝试删除此组并查看所选内容

  3. # 3 楼答案

    我怀疑你让这项工作变得比实际需要困难得多。如果您只想获取所有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());
    }