Вопрос по str_replace() и перенос строки
Нужно было заменить на сайте
<div><p>
на<div><p class="my_class">
<blockquote><p>
на<blockquote><p class="my_class">
Со вторым проблем не возникло, но первый фрагмент не менялся, т.к. между тегами был перенос строки \n
.
Решил что
$text = str_replace( '<div>\n<p>', '<div><p class="my_class">', $text);
решит проблему, но этот код не сработал. Далее пробывал
$text = preg_replace( '/<div><p>/x', '<div><p class="my_class">', $text);
где x модификатор, который как я понял, игнорирует переносы строк. Но тоже не помогло.
И только код
$text = str_replace( '<div>'.chr(10).'<p>', '<div><p class="my_class">', $text);
отработал как надо.
Всё равно интересно узнать почему первые два способа не сработали, а третий сработал, как я думал это одно и тоже? Благодарю за комментарии.
Для первого варианта нужно было использовать двойные кавычки. Только они в PHP обрабатывают спец символы в строке. Т.е. нужно так:
Второй вариант с регуляркой вообще не то - модификатор
x
говорит о том что не нужно учитывать пробелы и переносы строк в самой регулярке. Т.е. он создан для удобства чтобы можно было писать регулярки с дополнительными пробелами и переносами строк, которые никак не участвуют в самом регулярном выражении. Например:/< div > < p >/x
=/<div><p>/
.Тут тебе нужно было указать сам перенос, а не модификатор.