正则表达式匹配多个字符串

我需要创建一个可以匹配多个字符串的正则表达式。 例如,我想找到“好”或“好”的所有实例。 我找到了一些例子,但我想出来的似乎并不奏效:

\b(good|great)\w*\b 

谁能指出我正确的方向?

编辑:我应该注意,我不想只匹配整个单词。 例如,我可能想要匹配“ood”或“reat”(部分单词)。

编辑2:这是一些示例文本: “这是一个非常棒的故事。” 我可能想要匹配“this”或“really”,或者我可能想匹配“eall”或“reat”。

如果你可以保证你的单词列表中没有保留的正则表达式字符(或者如果你逃避它们),你可以使用这个代码在@"(a|big|word|list)"创建a big word list|没有任何问题 运算符,因为你正在使用它,只要那些()包围它。 这听起来像\w*\b模式是干扰你的比赛。

 String[] pattern_list = whatever; String regex = String.Format("({0})", String.Join("|", pattern_list)); 
 (good)*(great)* 

编辑后:

 \b(g*o*o*d*)*(g*r*e*a*t*)*\b 

我不完全确定正则表达式可以为您要做的事情提供解决方案。 但是,您可以使用以下代码为给定单词创建正则表达式。 虽然, 由此产生的正则表达式模式有可能变得非常长和慢

 function wordPermutations( $word, $minLength = 2 ) { $perms = array( ); for ($start = 0; $start < strlen( $word ); $start++) { for ($end = strlen( $word ); $end > $start; $end--) { $perm = substr( $word, $start, ($end - $start)); if (strlen( $perm ) >= $minLength) { $perms[] = $perm; } } } return $perms; } 

测试代码:

 $perms = wordPermutations( 'great', 3 ); // get all permutations of "great" that are 3 or more chars in length var_dump( $perms ); echo ( '/\b('.implode( '|', $perms ).')\b/' ); 

示例输出:

 array 0 => string 'great' (length=5) 1 => string 'grea' (length=4) 2 => string 'gre' (length=3) 3 => string 'reat' (length=4) 4 => string 'rea' (length=3) 5 => string 'eat' (length=3) /\b(great|grea|gre|reat|rea|eat)\b/ 

我想你要求smth你不是真正的意思,如果你想搜索任何部分的单词,你litterally搜索字母

例如,在“John and Shelly很酷”中搜索{Jack,Jim}

正在搜索名称{J,a,c,k,i,m}中的所有字母

* J * ohn * a * nd Shelly * a * re

为此,你不需要REG-EX 🙂

在我看来,A Suffix Tree可以帮助你

http://en.wikipedia.org/wiki/Suffix_tree#Functionality

请享用。

只需检查Regex.IsMatch()返回的布尔值。

 if (Regex.IsMatch(line, "condition") && Regex.IsMatch(line, "conditition2")) 

该行将同时具有正则表达式。

我不正确地理解这个问题:

如果你想匹配“伟大”或“reat”,你可以通过以下模式来表达:

 "g?reat" 

这简单地说“reat” – 部分必须存在而“g”是可选的。

这将匹配“reat”和“great”但不匹配“eat”,因为“reat”中的第一个“r”是必需的。

如果你有太多的单词“伟大”和“好”,你想要将它们与可选的“g”匹配,你可以这样写:

 (g?reat|g?ood) 

如果你想包括一个像这样的字边界:

 \b(g?reat|g?ood) 

你应该知道,这与“呼吸”之类的东西不匹配,因为你有“reat”但是“r”因为“b”而不在单词边界。

因此,如果你想匹配包含子串链接“reat”或“ood”的整个单词,那么你应该尝试:

 "\b\w*?(reat|ood)\w+\b" 

其内容如下:1。以单词边界开头,开始匹配任意数字的单词字符,但不要用。 2.匹配“reat”或“ood”确保只匹配那些包含其中一个的单词。 3.匹配“reat”或“ood”之后的任意数量的单词字符,直到达到下一个单词边界。

这将匹配:

“善良”,“好”,“ood”(如果一个完整的词)

它可以理解为:给我所有包含“ood”或“reat”的完整单词。

这是你在找什么?