代码之家  ›  专栏  ›  技术社区  ›  rautamiekka

Java正则表达式等价于PCRE/etc。速记“\K”?

  •  10
  • rautamiekka  · 技术社区  · 7 年前

    \K 放弃它左边的所有匹配项,除了捕获组,但Java不支持它,那么Java与它等价吗?

    1 回复  |  直到 7 年前
        1
  •  8
  •   Community c0D3l0g1c    4 年前

    没有直接等价物 但是,您始终可以使用 .

    \K 运算符及其限制,您将看到可以将此模式替换为 捕获组

    看见 rexegg.com \K reference :

    \K \K

    \K \K 可以放置在模式中的任何位置,因此您可以在 \K

    然而 \K 仍然是 ,即正则表达式引擎将匹配的文本与匹配值相加 在匹配模式的同时,以及 只从匹配中删除匹配的文本,并将索引保留在其所在位置。这意味着 \K 不比抓取群组好多少。

    value\s*=\s*\K\d+ PCRE/ONIGOM模式将转换为以下Java代码:

    String s = "Min value = 5000 km";
    Matcher m = Pattern.compile("value\\s*=\\s*(\\d+)").matcher(s);
    if(m.find()) {
        System.out.println(m.group(1));
    }
    

    constrained width lookbehind :

    Java接受lookbehind中的量词,只要匹配字符串的长度在预先确定的范围内。例如, (?<=cats?) 有效,因为它只能匹配三个或四个字符的字符串。同样地 (?<=A{1,10})

    因此,这也会起作用:

        m = Pattern.compile("(?<=value\\s{0,10}=\\s{0,10})\\d+").matcher(s);
        if(m.find()) {
            System.out.println(m.group());
        }
        
    

    Java demo .