Соответствующие кратные - PullRequest
0 голосов
/ 04 октября 2010

Мне нужно сопоставить следующее, используя 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 ]

4 голосов
/ 04 октября 2010

попробуйте это выражение '/cats([+_-])?and([+_-])?dogs/i'

edit: только что увидел, что вы не хотите + после "и", когда у вас уже есть + перед "и".Если это правильно, то вы должны использовать это выражение:

'/cats(\+and\+|\+and_|_and_|and)dogs/i'

2 голосов
/ 04 октября 2010

Я бы пошел с @ ITroubs ответом в этой ситуации, однако вы можете сделать несколько замен символов / строк на strtr следующим образом:

$trans = array(' ' => '','+' => '','-' => '', '_' => '');
$str = 'cats+and_dogs';
echo strtr($str, $trans); // prints: catsanddogs

Внимательно прочитайте документацию перед использованием.

1 голос
/ 04 октября 2010

ОК, я не думаю, что вы правильно определили свои правила сопоставления, но вот моя упрощенная версия :

(c|C)ats([+_ ][aA]|A)nd([+_ ][dD]|D)ogs

Возможно, вы хотите быть без учета регистра потому что вы использовали /i в своем шаблоне, но я бы хотел использовать другой подход.

Основные различия - по сравнению с другими ответами - это части выражения для слова ограничивающая .Я использую [+_ ][aA]|A, чтобы регулярное выражение совпадало с 'cats and' или 'catsAnd', но не с 'catsand'.Итак, суть в том, что я бы соответствовал тексту верблюд , если между ними нет пробелов.

...