/

Быстрофорум

Самый быстрый форум на новом движке. Здесь можно все!

(при регистрации нужно заполнить все поля)

ТемыРегулярные выражения - как выбрать все куски текста кроме подстроки? ТС: Ислам Ответов: 4
Страница: 0

Ислам 5 лет назад 0 байт как выбрать все куски текста кроме подстроки например "blbla"? например, текст:
"_ыв_blbla_к_мв_blbla_аыыв_blbla"
Нужно получить:
"_ыв_", "_к_мв_", "_аыыв_"
Вот так сделал, но не выбираются куски текста с начала и с конца строки, выбираются только куски между двух тегов:
preg_replace_callback( "#^|(blbla)(.+?)(blbla)|$#",
function ($matches) {
  return ( $matches[1]);
}, $text );
Mark Zbikowski 5 лет назад 0 байт У тебя там скобки не в том месте. Выбирается:
это: ^
или это: (blbla)(.+?)(blbla)
или это: $
А тебе надо
( это: ^ 
	или это: (blbla) )

плюс это: (.+?)

плюс это: ( (blbla)
	или это: $ )
должно быть так:
(^|blbla)(.+?)(blbla|$)
Ислам 5 лет назад 0 байт Так тоже не работает. Выбираются нужные куски текста, но через один!
Mark Zbikowski 5 лет назад 0 байт Тогда вот так:
(\G|blbla)(.+?)(blbla|$)
Надо вместо начала текста ^ поставить конец предыдущего поиска \G Нужный кусок текст будет во второй возвращаемой переменной: $2 А в первой и третьей $1 и $3 будет "blbla" если она была найдена, иначе пусто.
Ислам 5 лет назад 0 байт Спасибо! Это то что надо! Вообще мне нужно было весь текст кроме подстроки по шаблону "blbla" обработать функцией htmlspecialchars(). Итого вот что получилось:
$htmltext = preg_replace_callback( "#(\G|blbla)(.+?)(blbla|$)#",
function ($matches) {
  return ( $matches[1] . htmlspecialchars($matches[2]) . $matches[3]);
}, $text );
Страница: 0


Send (Ctrl+Enter) отправить