为了账号安全,请及时绑定邮箱和手机立即绑定

负向回顾:后缀重复时如何停止匹配?

负向回顾:后缀重复时如何停止匹配?

catspeake 2023-02-23 17:58:52
我有一些suffix我想在一些prefix不存在时匹配。但是,suffix可能会重复。一些例子: 1. prefixsuffix - should not match 2. prefixsuffixsuffix - should not match 3. prefixsuffixsuffixsuffix - should not match 4. suffix - should match 5. suffixsuffix - should match 6. suffixsuffixsuffix - should match我试过这个 regex: (?<!prefix)suffix,它在示例 2、3 上失败了,因为后者suffix是匹配的。所以我尝试了这个正则表达式:(?<!prefix)(suffix)*希望它可以suffix重复,但它似乎有同样的问题。所以我想要一个满足上述示例的正则表达式。
查看完整描述

3 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

在你的负面回顾中,交替使用suffix,当suffix真正匹配时,使用+而不是*(因为*可能匹配零次出现,这是不可取的):

(?<!prefix|suffix)(suffix)+


查看完整回答
反对 回复 2023-02-23
?
月关宝盒

TA贡献1772条经验 获得超5个赞

您可以在回顾之前添加一个单词边界断言,以确保您从单词字符开始匹配:

\b(?<!prefix)(?:suffix)+

然而,即使查看您的数据也\b(?:suffix)+可能对您有用。


查看完整回答
反对 回复 2023-02-23
?
SMILET

TA贡献1796条经验 获得超4个赞

我的猜测是,也许我们可以从这个表达式开始,

^(?=(?!prefix)(suffix))\1+$

演示

测试

import java.util.regex.Matcher;

import java.util.regex.Pattern;


final String regex = "^(?=(?!prefix)(suffix))\\1+$";

final String string = "prefixsuffix\n"

     + "prefixsuffixsuffix\n"

     + "prefixsuffixsuffixsuffix\n\n"

     + "suffix\n"

     + "suffixsuffix\n"

     + "suffixsuffixsuffix";


final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);

final Matcher matcher = pattern.matcher(string);


while (matcher.find()) {

    System.out.println("Full match: " + matcher.group(0));

    for (int i = 1; i <= matcher.groupCount(); i++) {

        System.out.println("Group " + i + ": " + matcher.group(i));

    }

}


查看完整回答
反对 回复 2023-02-23
  • 3 回答
  • 0 关注
  • 117 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信