2013-02-07 38 views
0

我想知道什麼是最好的方式來知道我的子串是否在字符串中。如何在字符串中找到發生?

那樣,我也有這幾樣價值:

"abcd.tif" 
"abcd_A.tif" 
"abcd_B.tif" 
"abcd_VP.tif" 

如果「_A」或「_B」或「_VP」出現在字符串中我將檢測。

最好的方法是什麼?使用substr和strlen的組合?

或使用正則表達式?

+6

曾經在PHP中看過strpos()函數(http://www.php.net/manual/en/function.strpos.php)嗎? –

+0

好吧,preg_match比strpos函數更加高效,我猜(strpos將需要三個if/elseif塊)。所以,我會鼓勵寧可使用正則表達式。 – Rana

+0

@MarkBaker>事實上,沒有看到,但我更喜歡使用preg_match – bahamut100

回答

6

使用strpos,它會給你在字符串中針的0索引位置。如果它不在字符串中,strpos返回false。 (也有不區分大小寫的stripos)。

但是,一次只能檢查一根針。如果您想檢查任何三個的同時,你可以使用一個循環或寫的更簡潔但效率較低的方式:

preg_match('/_A|_B|_VP/', $str) 

...這將返回true如果任何這三個串火柴。

+0

要找到匹配的內容以及它的位置,可以使用捕獲組和'PREG_OFFSET_CAPTURE'標誌。 – nickb

0

最有效的方法(我知道:P)是strpos

$s = 'abcd_VP.tif'; 
if (strpos('_A', $s) !== false) { 
    // do your thing 
} 

你可以在此之後一個簡單的||,也不會短,但它會比正則表達式快得多:

$s = 'abcd_VP.tif'; 
if ((strpos('_A', $s) !== false) || (strpos('_B', $s) !== false) || (strpos('_VP') !== false)) { 
    // do your thing 
}