繁体   English   中英

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

[英]Regex to match multiple strings

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

\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

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

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

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

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

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

请享用。

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

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

"g?reat"

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

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

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

(g?reat|g?ood)

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

\b(g?reat|g?ood)

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

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

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

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

这将匹配:

“善良”,“好”,“ood”(如果完整的话)

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

那是你在找什么?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM