猿问

用于匹配列表中包含两个不同单词的所有字符串的正则表达式

当且仅当它包含给定列表中的两个不同单词时,我需要一个匹配字符串的正则表达式(在 Java 中) 。

例如,如果单词列表是{blue,yellow,pink},那么字符串“blue and pink”和“yellow is the new blue”会匹配,但字符串“I like blue”不会匹配(只有一个单词从列表中出现),字符串“我的粉色衬衫太粉红色”也不会出现(它不包含两个或多个不同的词,但同一个词两次)。

最接近我想要的正则表达式的是:

(.(blue|yellow|pink).){2}

此正则表达式将匹配包含列表中两个或多个单词的任何字符串,但即使这两个单词相同,它也会匹配(如“我的粉红色衬衫非常粉红色”示例中)。

谢谢!!


慕森卡
浏览 602回答 3
3回答

汪汪一只猫

捕获初始单词后,在匹配第二个颜色词交替之前,为第一个捕获组重复字符和负前瞻:.*(blue|yellow|pink).*(?!\1)(blue|yellow|pink).*https://regex101.com/r/OPo2bf/1

慕姐8265434

您可以使用正向前瞻和带有锚的捕获组来断言字符串的开头和结尾,并使用带有反向引用的捕获组来断言右侧的内容不是已经捕获的内容:^(?=.*(blue|yellow|pink).*(?!\1)(blue|yellow|pink)).*$正则表达式 101上的演示

斯蒂芬大帝

你可以用两个前瞻来做到这一点^(?=.*blue)(?=.*pink).+$但是您需要在之前以编程方式指定单词。在 regex101.com 上查看演示。
随时随地看视频慕课网APP

相关分类

Java
我要回答