Я много искал, но не нахожу подсказки или решения для моей проблемы. Проблема в том, что я не могу сопоставить слова в одинарных кавычках. Возможно, это связано с настройками сервера, php или mysql. Мне нравится знать, могу ли я обойти это.

У меня есть живой пример здесь: Fiddle with preg_replace_callback

<?php
$message = "1. test autotest test<br \>2. test auto's test<br \>3.test auto test ";
$message = preg_replace_callback("~( auto(?:'s)? )~si", function ($match)
    { return ' <a href="https://example.com">'.$match[1].'</a> '; }, $message, 1);
echo $message;
// here number 2 is correctly replaced, on my site number 3. Number 2 is not working on my site. I suspect the single quote is the problem on my site. Is there a workaround?
?>

Результат:

  1. тест автотест тест
  2. тест тест авто
  3. тест авто тест

Когда я внедряю этот код на своем сайте, auto's никогда не совпадает. Вот почему я думаю, что это связано с настройками сервера, PHP или MySQL. Мне нравится знать, могу ли я обойти это в своем регулярном выражении.

0
Karel 17 Авг 2019 в 11:40

2 ответа

Лучший ответ

Наконец-то нашел решение. Единая кавычка была сохранена в базе данных как &#39; Замена ~( auto(?:'s)? )~ на ~( auto(?:&#39;s)? )~ решила мою проблему.

Полный рабочий код:

<?php
$message = "1. test autotest test<br \>2. test auto's test<br \>3.test auto test ";
$message = preg_replace_callback("~( auto(?:&#39;s)? )~si", function ($match)
    { return ' <a href="https://example.com">'.$match[1].'</a> '; }, $message, 1);
echo $message;
?>

Подсказка . Наконечник. Так что в подобных случаях проверьте, как символ хранится в вашей базе данных, и используйте это в своем регулярном выражении.

0
Karel 21 Авг 2019 в 14:31

Просто удалите 1 в конце preg_replace (это означает, что замена только один раз):

$message = preg_replace_callback("~( auto(?:'s)? )~si", function ($match)
    { return ' <a href="https://example.com">'.$match[1].'</a> '; }, $message);
//                                                                   here __^^^
0
Toto 17 Авг 2019 в 09:57