MikChan
@MikChan

Как решить проблему с preg_replace?

Итак, имеется такой код:
if($l->post_type == 'post'){
	$story = $l->text;
	$story = str_replace("\n", '<br>', $story); // переносы
	$story = preg_replace("/(?<=^|\s)#\S{1,24}+(?=$|\s)/u", '', $story); // убираем хештеги
	print $story."<br>***<br>";
 }

Проблема заключается в том, что если скормить ему вот такой $l
{
    "post_type": "post",
    "text": "#мудрость\n\nМаядзуко как-то попивал чай, как к нему пришёл ученик за советом. \n- Маядзуко, скажите, какое самое важное наставление для вас было в жизни? \n- Их было три."
}


То выдает он следующее:
как-то попивал чай, как к нему пришёл ученик за советом. <br>- Маядзуко, скажите, какое самое важное наставление для вас было в жизни? <br>- Их было три.<br>***<br>


Мысль была о том, что preg_replace пожирает первое слово вместе с хештегом, но если скормить коду вот такой $l
{
    "post_type": "post",
    "text": "#мудрость \n\nМаядзуко как-то проводил занятие со своими учениками во дворе храма.\n- Кто может сказать мне название самого вкусного блюда на планете? \n- Песчаный берег около тихого лунного озера."
}


То, к привеликому удивлению, оно работает правильно
<br><br>Маядзуко как-то проводил занятие со своими учениками во дворе храма.<br>- Кто может сказать мне название самого вкусного блюда на планете? <br>- Песчаный берег около тихого лунного озера. <br>***<br>


Я уже совсем не понимаю, что к чему и почему, поэтому толкните меня на мысль, где же тут ошибка (или ткните меня туда носом), пожалуйста.
  • Вопрос задан
  • 146 просмотров
Решения вопроса 1
MikChan
@MikChan Автор вопроса
Голова моя полено. Ошибка оказалась в том, что в случае
#мудрость\n\nтекст
выражение принимало за символы все до следующего пробела, в том числе и символы новой строки. Поэтому убирало хештег, переносы и первое слово в тексте.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы