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

如何仅在正则表达式中的显式信号字之后进行匹配?

  •  2
  • membersound  · 技术社区  · 7 年前

    我想匹配 SIGNAL END 单词

    (?!SIGNAL)\\W+\\d+(?=END)
    

    但是:以下匹配 +2 和 ++7 :

    random+2END+SIGNAL+random++7END
    

    这里匹配吗?我 只有 ++7

    我的最终目标是用空白代替比赛。

    例子: https://regexr.com/4727h

    Java代码:

    Pattern.compile(REGEX).matcher(input).replaceFirst(StringUtils.EMPTY);
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Wiktor Stribiżew    7 年前

    你可以用

    s.replaceFirst("(SIGNAL.*?)\\W+\\d+(END)", "$1$2")
    

    正则表达式匹配:

    • (SIGNAL.*?) -捕获组1( $1 SIGNAL *? 是一个不贪婪、不情愿的量词)
    • \W+ _ )
    • \d+ -1+位数
    • (END) -捕获组2( $2 ):安 END 子串
    • $1$2

    Java demo :

    String s = "random+2END+SIGNAL+random++7END";
    System.out.println(s.replaceFirst("(SIGNAL.*?)\\W+\\d+(END)", "$1$2"));
    // => random+2END+SIGNAL+randomEND