2012-02-10 63 views
0

是否有可能在PHP正则表达式来进行部分匹配,这样,如果我有这样一个数组:正则表达式部分字符串匹配

$words = array("john", "steve", "amie", "kristy", "steven"); 

我提供“乔”,它会返回“约翰”或者“EVE”被提供,它返回“史蒂夫”?

+1

为什么你的正则表达式数组?为什么不'strpos(“john”,“jo”)'? – 2012-02-10 08:19:22

+0

,因为当提供搜索词时,它应该返回最佳匹配。 strpos要求我知道要对比的单词 – dukevin 2012-02-10 08:20:43

+0

你刚刚说过要比较的单词是'jo'。所以迭代数组并查看'strpos()'不返回'False'。我没有看到问题。 – 2012-02-10 08:21:47

回答

1
$words = array("john","jogi", "steve", "amie", "kristy", "steven"); 
foreach ($words as $value) { 
    if (preg_match("|jo|", $value)) { 
     $arr[] = $value; 
    } 
} 
var_dump($arr); 

这将返回与约翰和乔吉

+0

你的代码不起作用:http://codepad.org/lyFou1z6 – dukevin 2012-02-10 09:47:42

+0

它正在工作,告诉我一件事前夕将回到史蒂夫和史蒂文娜?或者你想只有第一个匹配的答案将被返回。 – Poonam 2012-02-10 09:52:25

+0

你看到了键盘的链接?我用键盘来执行你的PHP代码,它返回“null”和几个警告 – dukevin 2012-02-10 09:58:33

1

如果您只需要查找子字符串,请使用strpos(用于区分大小写的搜索)或stripos进行不区分大小写的搜索。

如果你需要的正则表达式,那么你可以在两端指定通配符:/.*jo.*/这将迫使它总是与“道场”,“乔”,“乔”,“道场”等

要搜索在你的模式的数组中,看看preg_grep - 这可以让你传入一个正则表达式(/.*jo.*/)作为第一个参数,并将一个数组作为第二个参数($words),并返回与你的正则表达式匹配的所有元素。

+0

不需要'。*'。 – Gumbo 2012-02-10 08:31:47

+0

完整性检查:) – Joe 2012-02-10 08:35:09

+0

这只是使处理正则表达式更加昂贵。 – Gumbo 2012-02-10 08:41:08

0

你可以遍历你的数组,并使用preg_match来匹配你的项目。
如果您不提供^$它会自动进行部分匹配。