所以我几乎没有需要使用正则表达式匹配的单词。
steve jobs
steve
bill gates
mark
stevejobs
现在我想查找包含此字符串stevejobs
现在我应该steve jobs
,steve
和stevejobs
我可以使用此表达式steve(?:jobs?)?
但我的代码并不知道将一个单词拆分为两个名称,即从stevejobs
到steve
和jobs
所以这个词可以是任何内容,它可以是ntechi
并且会匹配technology
,technical
,因为tech
是这两个词的一部分。
可以这样做吗?
答案 0 :(得分:0)
完成评论后,您似乎正在寻找任何子字符串2个或更多字符的匹配项。所以ntechi会因为ch而匹配聊天。
由于任何超过2的子字符串实际上由2的多个子字符串组成,我们只需要遍历2的所有子字符串:
$mylist = array(
'steve jobs',
'steve',
'bill gates',
'mark',
'stevejobs'
);
for ($j = 0; $j < count($mylist); $j++)
for ($i = 0; $i < strlen($str)-1); $i++)
if (strstr(substr($str, $i, $i+1), $mylist[$j])) {
echo $mylist[$j]." contains ".substr($str, $i, $i+1);
break; // this will keep the same one from being reported multiple times
}
不幸的是,这不会告诉你最长的匹配,但它会列出你的数组中匹配的项目。
哦,我的道歉 - 我只是注意到你使用ruby-on-rails而不是PHP。希望您可以将PHP代码视为伪代码并将其转换为ruby。
答案 1 :(得分:0)
由于您不知道拆分字符串的位置,因此您只能搜索与任何可能的子字符串匹配的字符串。设置一个最小长度可能是一个好主意,这样你就不会只包括&#34; bill gate&#34;因为它包含子串&#34; e&#34;。您可以按匹配的子字符串长度对匹配进行排序 - 匹配的子字符串越长,匹配就越好。
首先,您会发现一些函数返回所有子字符串here。