Как заменить по регулярному?

$text = "первое • второе";
$text = preg_replace("/[а-яё:;,.](.*?)•/ismu", "$1<br>•$3", $text);
//нужно: первое <br>• второе

Такой вариант съедает везде первую букву, выходит:
<b>ервое <br>•торое</b>
DevMan кидал недавно пример ideone.com/uu1V1M я его изучил но в упор не могу понять почему там в $1 и $3 попадает всё верно а у меня косяк какой-то

Ну и ещё раз уж вопрос задал может кто пояснит по документации:
replacement может содержать ссылки вида \\n, либо (начиная с PHP 4.0.4) $n, причем последний вариант предпочтительней. Каждая такая ссылка будет заменена на подстроку, соответствующую n-ой подмаске. n может принимать значения от 0 до 99, причем ссылка \\0 (либо $0) соответствует вхождению всего шаблона. Подмаски нумеруются слева направо, начиная с единицы.

Что такое подмаска я никак не пойму? Какой бы пример подобрать что бы посмотреть на несколько значений, допустим от 1 до 5 в этой n
  • Вопрос задан
  • 249 просмотров
Решения вопроса 2
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
$text = preg_replace("/•/mu", '<br>•', $text);
Tолько непонятно зачем для такой простой задачи регулярку использовать, есть же, например, str_replace.

Про маски можно почитать тут.
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
$text = preg_replace("/(?<=[а-яё:;,.])\s*•/ismu", " <br>•", $text);

А документацию лучше читать английскую, в ней отсутствуют фантазии переводчика.
replacement may contain references of the form \\n or (since PHP 4.0.4) $n, with the latter form being the preferred one. Every such reference will be replaced by the text captured by the n'th parenthesized pattern.

Как видите речь идёт не о "подмасках", а о шаблонах в круглых скобках, именно они и нумеруются слева направо начиная с единицы. В вашем случае $1 соответствует (.*?), а $3 не определено.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
bigton
@bigton
Web-программист
Если задача "первое • второе" преобразовать в "первое br• второе", почему просто не использовать str_replace()?

echo str_replace("•", "<br>•", "первое • второе");
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы