M
M
Mr. Mik2015-11-19 20:18:55
PHP
Mr. Mik, 2015-11-19 20:18:55

How to solve the problem with preg_replace?

So we have this code:

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>";
 }

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

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

The idea was that preg_replace devours the first word along with the hashtag, but if you feed the code like this $l
{
    "post_type": "post",
    "text": "#мудрость \n\nМаядзуко как-то проводил занятие со своими учениками во дворе храма.\n- Кто может сказать мне название самого вкусного блюда на планете? \n- Песчаный берег около тихого лунного озера."
}

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

I don’t understand at all what’s what and why, so push me to think where the mistake is (or poke my nose there), please.

Answer the question

In order to leave comments, you need to log in

1 answer(s)
M
Mr. Mik, 2015-11-19
@MikChan

My head is a log. The error turned out to be that in the case

#wisdom\n\ntext
the expression accepted as characters everything up to the next space, including newline characters. Therefore, the hashtag, hyphenation and the first word in the text were removed.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question