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

我有一些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重复,但它似乎有同样的问题。


所以我想要一个满足上述示例的正则表达式。


catspeake
浏览 119回答 3
3回答

万千封印

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

月关宝盒

您可以在回顾之前添加一个单词边界断言,以确保您从单词字符开始匹配:\b(?<!prefix)(?:suffix)+然而,即使查看您的数据也\b(?:suffix)+可能对您有用。

SMILET

我的猜测是,也许我们可以从这个表达式开始,^(?=(?!prefix)(suffix))\1+$演示测试import java.util.regex.Matcher;import java.util.regex.Pattern;final String regex = "^(?=(?!prefix)(suffix))\\1+$";final String string = "prefixsuffix\n"&nbsp; &nbsp; &nbsp;+ "prefixsuffixsuffix\n"&nbsp; &nbsp; &nbsp;+ "prefixsuffixsuffixsuffix\n\n"&nbsp; &nbsp; &nbsp;+ "suffix\n"&nbsp; &nbsp; &nbsp;+ "suffixsuffix\n"&nbsp; &nbsp; &nbsp;+ "suffixsuffixsuffix";final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);final Matcher matcher = pattern.matcher(string);while (matcher.find()) {&nbsp; &nbsp; System.out.println("Full match: " + matcher.group(0));&nbsp; &nbsp; for (int i = 1; i <= matcher.groupCount(); i++) {&nbsp; &nbsp; &nbsp; &nbsp; System.out.println("Group " + i + ": " + matcher.group(i));&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java