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

Вопросы и ответыРубрика: Вопросы по UPDSРегулярное выражение для выборки краткого содержаия
vikont asked 1 год ago

Есть такое регулярное выражение
//div[@class=”entry”]/p[1]
С его помощью выбирается текст выделенный первыми тегами <p></p>
А как выбрать не весь текст, а только до каких то слов или точки. Например до слов “Об этом”
Если возможно, то еще бы выполнить условие по количеству знаков.

5 ответ
dssoft answered 1 год ago

Для этого есть несколько вариантов, заранее считаем что получено краткое содержание по указанному вами xpath правилу:

//div[@class="entry"]/p[1]

Используем модификатор truncate чтобы обрезать и так как в описании могут содержаться теги и обрезка будет не корректно то еще применим strip_tags и strip

{$description|strip_tags|strip|truncate:150}

Это следует указывать во вкладке шаблон -> шаблон краткого описания.
Если нужно брать до слов “Об этом” то также в шаблонах

{$description|ereplace:'/(.+?)Об этом.+?/isu','${1}'}

Или совместить все вместе:

{$description|strip_tags|strip|ereplace:'/(.+?)Об этом.+?/isu','${1}'|truncate:150}
vikontreplied 1 год ago

Не сработал ни один вариант:
{$description|ereplace:’/(.+?)Об этом.+?/isu’,’${1}’} – поле краткого описания без записи
{$description|strip_tags|strip|ereplace:’/(.+?)Об этом.+?/isu’,’${1}’|truncate:150} – импорт вообще отказался работать.

vikontreplied 1 год ago

Заработал только такой вариант:
{$content|strip_tags|strip|truncate:150} – ошибка была в применении переменой $description вместо $content, но он обрезает не корректно, надо было до точки но не более 150 символов.
Остальные варианты к сожалению не работают

pocus answered 1 год ago

Спасибо, очень наглядно.
Я пока обхожусь html/css селекторами, но чувствую что регулярки изучать придётся.

vikont answered 1 год ago

Ответить на Регулярное выражение для выборки краткого содержаияvikontответил 23 минуты назад

 

Не сработал ни один вариант:

{$description|ereplace:’/(.+?)Об этом.+?/isu’,’${1}’} – поле краткого описания без записи

{$description|strip_tags|strip|ereplace:’/(.+?)Об этом.+?/isu’,’${1}’|truncate:150} – импорт вообще отказался работать. 

Заработал только такой вариант:

{$content|strip_tags|strip|truncate:150} – ошибка была в применении переменой $description вместо $content, но он обрезает не корректно, надо было до точки но не более 150 символов.

Остальные варианты к сожалению не работают

dssoft answered 1 год ago

Так, вы меня совсем запутали.
Это

//div[@class="entry"]/p[1]

не регулярное выражение а xpath правило

и я думал что вы имеете ввиду что поставили это правило для выборки анонса материала во вкладке материал на странице настройки правил, в таком случае все что я писал выше нормально срабатывает

а у вас она по ходу стоит во вкладке шаблон для удаления первого параграфа

тут с регулярками нужно быть осторожным чтобы в итоге не повредить html код основного текста, не оставить там какой то не закрытый тег что может привести к тому что на странице материала слетит дизайн сайта и во всех регулярках учитывать html элементы

vikont answered 1 год ago

Возможно есть путаница, но вы сами написали, что

{$description|strip_tags|strip|truncate:150}

Это следует указывать во вкладке шаблон -> шаблон краткого описания.
Если нужно брать до слов “Об этом” то также в шаблонах

{$description|ereplace:'/(.+?)Об этом.+?/isu','${1}'}

Или совместить все вместе:

{$description|strip_tags|strip|ereplace:'/(.+?)Об этом.+?/isu','${1}'|trunca "
Вот я и разместил в шаблонах.