[英]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.