匹配倍数

时间:2010-10-04 15:35:02

标签: php regex preg-match

我需要使用preg_match()

匹配以下内容
cats and dogs
catsAndDogs
i like cats and dogs

等,所以我简单地剥离了空格并将其降低并将其用作preg_match()中的模式;

'/catsanddogs/i'

但现在我也需要匹配以下内容:

cats+and+dogs
cats_and_dogs
cats+and_Dogs

除了嵌套之外,还有多种快速简便的方法可以多次执行字符串替换吗?我希望最终得到与之相匹配的相同模式。

感谢。

3 个答案:

答案 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文本。