Новое Я не понимаю, почему звёздочки не меняются на em? Я же сказал найти слово, если оно начинается на * и заканчивается на *
echo preg_replace('#\b(?<=\*)(.+)(?=\*)\b#', '<em>$1</em>', 'This text has *two* *italic* bits');
Почему выводятся только последние буквы слова, не полностью слово?
echo preg_replace('#\*([a-z])+\*#', '<em>$1</em>', 'This *text* is *italic*');
В случае с \b(?<=\*)(.+)(?=\*)\b
звездочки являются частью предварительных блоков просмотра, т.е. они не становятся частью заменяемой строки. Тут ещё можно добавить то, что (.+)
— "жадный шаблон", т.е. найдёт все от первой звездочки до последней, (.+?)
выглядит предпочтительнее, так как найдет текст от первой звездочки до ближайшей справа.
В #\*([a-z])+\*#
у вас захватывающая подмаска захватывает только по одной букве, квантификатор должен быть внутри подмаски.
Используйте
preg_replace('#\*([a-z]+)\*#', '<em>$1</em>', 'This *text* is *italic*');
См. онлайн-демо.
Если необходимо добавить поддержку всех букв Юникода:
preg_replace('#\*(\p{L}+)\*#u', '<em>$1</em>', 'This *text* is *italic*');
где \p{L}
находит любую букву Юникода.
Если стоит задача найти звездочку, после которой стоит буква, и далее любой текст, завершающийся буквой, после которой стоит звездочка, можно использовать
preg_replace('#\*(\p{L}(?:.*?\p{L})?)\*#u', '<em>$1</em>', 'This *text* is *italic*');
или
preg_replace('#\*(\p{L}(?:[^*]*\p{L})?)\*#u', '<em>$1</em>', 'This *text* is *italic*');
Тут \p{L}(?:[^*]*\p{L})?
найдет букву, после которой опционально следует 0 и более любых символов, отличных от *
, и вновь любая буква. Т.е. найдутся *Да, нет*
,
а * \\ *
найдены не будут.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Пытаюсь отобразить процент загрузки файлов, которые загружаю через GET методПри переходе по ссылке http://site/updates/ загружаются файлы из массива,...
Есть функция отправки email-уведомлений на почту администратораФункция рабочая (уведомление приходит), но она срабатывает каждый раз когда...