2011-08-09 150 views
2

如果我的正则表达式模式@"\b(word1|word2)\b"只在找到一个确切单词时返回true,如果找到两个确切单词,哪个模式将返回true?需要正则表达式帮助

我发现的唯一例子就像我做的那样,只要找到1个单词就返回true,但是我希望它在所有单词被发现时都返回true。所以同一个单词的倍数不计数。我需要知道是否至少有一个单词出现。

编辑:

例子: “敏捷的棕色狐狸跳过懒狗”

模式:@"\b(fox|dog)\b" < ----返回true

模式:@"\b(fox|elephant)\b" < - - 返回true,我希望它返回false。

补充:我必须是灵活的,因为单词量来搜索取决于我的用户

+2

随着虽然他们之间的单词边界?如果你想给一个样本单词列表和一些你想要匹配的样本字符串,这将是非常有帮助的。 –

+2

如何制作2个正则表达式?它会简化很多。 – JMichelB

回答

2

你可以做到这一点利用向前看符号

(?=.*\bWord1\b)(?=.*\bWord2\b).* 

看到它here on Regexr

(?=.*\bWord1\b)是一个积极的前瞻。它检查模式内部是否出现在字符串内。它不匹配任何东西!

要匹配字符串,最后会有.*,但只有两个预览都为真,即在字符串中找到您的两个单词时,才会匹配。

+0

谢谢一堆。作品。 – Jeroen

0

答案很简单,有两个正则表达式一个字为先,和一个其他的,如果两个返回true(和他们),那么结果是真实的。

@"\b(word1)\b"@"\b(word2)\b"

您可以检查here

+0

他使用C#,但不是Java。 – Vache

0

如果你一定要,

@"\b(word1\b(.*\b)?word2|word2\b(.*\b)?word1)\b" 

但它会更好地使用两个正则表达式。

0

Stema的回答是最好的imo。

以下是

鉴于查尔斯

的简化版本:“?单词和单词2和WORD3和word4 word4是个好人,是不是他WORD1”

(\ bword4 \ b \ bword2 \ C |。\ bword2 \ b \ bword4 \ B)

但就像我说STEMA FTW