我需要使用preg_match()
匹配以下内容cats and dogs
catsAndDogs
i like cats and dogs
等,所以我简单地剥离了空格并将其降低并将其用作preg_match()中的模式;
'/catsanddogs/i'
但现在我也需要匹配以下内容:
cats+and+dogs
cats_and_dogs
cats+and_Dogs
除了嵌套之外,还有多种快速简便的方法可以多次执行字符串替换吗?我希望最终得到与之相匹配的相同模式。
感谢。
答案 0 :(得分:4)
试试这个表达式'/cats([+_-])?and([+_-])?dogs/i'
编辑:当你在“和”之前已经有一个+时,只看到你不想在“和”之后加一个+。如果那是正确的那么你应该使用这个表达式:
'/cats(\+and\+|\+and_|_and_|and)dogs/i'
答案 1 :(得分:2)
在这种情况下,我会使用@ITroubs回答,但是,您可以使用strtr
进行多个字符/字符串替换,如下所示:
$trans = array(' ' => '','+' => '','-' => '', '_' => '');
$str = 'cats+and_dogs';
echo strtr($str, $trans); // prints: catsanddogs
使用前请仔细阅读documentation。
答案 2 :(得分:1)
好的,我认为您没有很好地定义匹配规则,但here is my simplified version:
(c|C)ats([+_ ][aA]|A)nd([+_ ][dD]|D)ogs
您可能希望不区分大小写,因为您在模式中使用了/i
,但我想采用其他方法。
主要差异 - 与其他答案相比 - 是单词边界的表达部分。我使用[+_ ][aA]|A
,因此正则表达式将匹配'cats and'或'catsAnd',但不匹配'catsand'。所以底线是,如果中间没有空格,我只会匹配camel case文本。