@shurc

Регулярное выражение для замены текста?

Доброй поры суток.
Есть описание товара в интернет магазине. Оно состоит из текстовой части (в начале) и таблицы с характеристиками (в конце). А мне нужно поменять их местами - таблицу с характеристиками поставить в начало, а текст - в конец.

Таблица с характеристиками начинается примерно так
<strong>Характеристики</strong><br><br><table>
и заканчивается соответственно так</table>.

Использую для решения моей задачи следующее регулярное выражение для поиска нужного вхождения подстроки с характеристиками:
(.*)(<strong>Характеристики<\/strong>.*<table>.*<\/table>)


В половине товаров - все работает, как надо! И это радует!
А в половине товаров - функция не находит текстового описания, которое я помещаю в подгруппу (.*)

Вот посмотрите
https://regex101.com/r/ettOIn/1 - товар1 - здесь все корректно разбивает на подстроки
https://regex101.com/r/ettOIn/2 - товар2 - не находит текстового описания
https://regex101.com/r/ettOIn/3 - товар3 - не находит текстового описания

Подскажите, как правильно построить рег. выражение, чтобы корректно работало на всех товарах?
  • Вопрос задан
  • 67 просмотров
Решения вопроса 2
@dodo512
Добавить флаг /s . Тогда (.*) будет захватывать и символы новой строки.
https://regex101.com/r/ettOIn/4
Ответ написан
Комментировать
dollar
@dollar
Делай добро и бросай его в воду.
Можно вместо .* использовать [\s\S]*
([\s\S]*)(<strong>Характеристики<\/strong>.*<table>.*<\/table>)

Метасимвол . означает любой символ, но обычно сюда не включён символ перевода строки. На regex101.com вы можете добиться того же эффекта, добавив флаг s:
single line
(Dot matches newline)

Но когда вы в шаблоне пишете [\s\S], то это вообще любой символ без исключений.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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