2012-02-10 104 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來匹配你的項目。
如果您不提供^$它會自動進行部分匹配。