2010-09-09 132 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