2010-09-09 178 views
0

我試圖創建一個函數來檢查一個字符串在PHP中的子字符串。PHP:使用preg_match在字符串中搜索子字符串?

public static function stringCheck ($string, $substring) { 
    $patern = "/".$substring."/"; 

    if (preg_match($substring, string) { 
    return true; 
    } 
    else return false; 
} 

,但如果我進入的preg_match使用特殊字符(^ [$()| * + {?)它搞砸了搜索。

我試圖像下面的代碼,但沒有工作

$speicalChar = '/(\^|\.|\[|\$|\(|\)|\*|\+|\?|\{|\\)/'; 

任何人都有一個解決方案或也許到的preg_match的替代品。請記住我也希望能夠檢查符號。我嘗試過使用strstr,但遇到符號問題。

感謝=]

+0

1)它不是$ patern,它的$模式。 2)你忘記了$,它不是「if(preg_match($ substring,string)」它是「if(preg_match($ pattern,$ string)」&你不需要else,它可以基本上是:「if (preg_match($ pattern,$ string){return true;} return false;「因爲if條件爲真,返回值爲true,結束會停止函數,否則返回false並停止函數 – ahmet2106 2010-09-09 07:48:20

+0

'return(bool)preg_match($ pattern,$ string);' – BoltClock 2010-09-09 07:52:11

+0

ya這不是我的實際代碼,我只是寫了一個快速的例子,所以我的語法錯誤的不好。謝謝,我主要只是想知道如何檢查對於特殊字符 – nubme 2010-09-09 07:53:49

回答

4
$pattern = '/' . preg_quote($substring, '/') . '/'; 

這轉義特殊字符爲您服務。同時也傳入'/',所以它也會被轉義,因爲你將它用作分隔符。

另一件事,在修復了一些拼寫錯誤您如果條件:

if (preg_match($pattern, $string)) { 
+0

哇謝謝很多boltclock!preg_quote正是我正在尋找的=] – nubme 2010-09-09 07:56:17

4

有爲什麼要使用preg_match任何理由?它是否必須是正則表達式?那麼strpos()

返回乾草堆串中第一次出現針的數字位置。

public static function stringCheck ($string, $substring) { 
    return (strpos($string, $substring) !== false); 
} 

如果你沒有理由使用正則表達式,不使用它們。

更新

關於評價關於public static:不要創建類收集功能(它看起來像你在這裏做這個)​​。那沒有意義。只需創建普通功能並將它們包含在腳本中即可。使用真正的面向對象的類。
Btw。你應該爲你的功能考慮一個更富有表現力的名字。 stringCheck非常模糊(它檢查什麼?)。

+0

@stereofrog:嗯,我只是複製了OPs方法簽名。不要責怪我!):D – 2010-09-09 09:40:24

+0

@stereofrog:你怎麼得到這麼漂亮,圓潤的浮子? – BoltClock 2010-09-09 09:56:25