powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Регулярные выражения - как выбрать все куски текста кроме подстроки?
25 сообщений из 56, страница 1 из 3
Регулярные выражения - как выбрать все куски текста кроме подстроки?
    #38565770
D_Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как выбрать все куски текста кроме подстроки "blbla" например?

например, текст: "_ыв_blbla_к_мв_blbla_аыыв_blbla"
Нужно получить: "_ыв_", "_к_мв_", "_аыыв_"
...
Рейтинг: 0 / 0
Регулярные выражения - как выбрать все куски текста кроме подстроки?
    #38565804
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D_Pavel,

Код: php
1.
2.
$a = explode('blbla', "_ыв_blbla_к_мв_blbla_аыыв_blbla");
print_r( $a );
...
Рейтинг: 0 / 0
Регулярные выражения - как выбрать все куски текста кроме подстроки?
    #38565894
D_Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это не регулярное выражение.
...
Рейтинг: 0 / 0
Регулярные выражения - как выбрать все куски текста кроме подстроки?
    #38565924
D_Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Например, если подстрока равна "blbla" или "blblb" или "blblc" или "blbld" и т.д., то через explode не получится, нужно через регулярное выражение.
...
Рейтинг: 0 / 0
Регулярные выражения - как выбрать все куски текста кроме подстроки?
    #38565939
D_Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: php
1.
$text = preg_replace_callback( "#(.*)(blbla)(.*)#", function ($matches) {echo "<pre>"; print_r ($matches); echo "</pre>"; return ( htmlspecialchars($matches[1])); }, $text );



Вот типа того нужно, только с правильным регуляторным выражением.
...
Рейтинг: 0 / 0
Регулярные выражения - как выбрать все куски текста кроме подстроки?
    #38565983
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D_PavelНапример, если подстрока равна "blbla" или "blblb" или "blblc" или "blbld" и т.д., то через explode не получится, нужно через регулярное выражение.
что значит ИЛИ? вы в цикле будете перебирать эти варианты? или ходите их сразу описать в одном регулярном выражении?
если в цикле, то explode вам хватит за глаза.
если хотите регуляркой - то у вас проблема. регулярки незаточены искать то что ненужно, они наоборот ищут.
...
Рейтинг: 0 / 0
Регулярные выражения - как выбрать все куски текста кроме подстроки?
    #38566019
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r u,

возможно вам хватит этого выражения
Код: php
1.
/(?<=^|blbla).+?(?=blbla|$)/i
...
Рейтинг: 0 / 0
Регулярные выражения - как выбрать все куски текста кроме подстроки?
    #38566040
D_Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Отлично! Это работает!

Но к сожалению только на подстроках только фиксированной длины. Если подстрока вида: \[img\](.*?)\[/img\] то выходит ошибка:
Warning: preg_replace_callback(): Compilation failed: lookbehind assertion is not fixed length at offset 3742 in /data/www/public_html/sex.ru/index.php on line 224573
...
Рейтинг: 0 / 0
Регулярные выражения - как выбрать все куски текста кроме подстроки?
    #38566054
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D_Pavel,

что вы вообще делаете? опишите подробно начальную исходную задачу.
а то, есть ощущение что вы решаете совсем не ту задачу. сами себе усложняете жизнь
...
Рейтинг: 0 / 0
Регулярные выражения - как выбрать все куски текста кроме подстроки?
    #38566058
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r u,

если парсите bb-коды, то есть куча готовых библиотек, и готовых регулярок. велосипед изобретать нет необходимости
...
Рейтинг: 0 / 0
Регулярные выражения - как выбрать все куски текста кроме подстроки?
    #38566070
D_Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мне нужно обработать текст функцией htmlspecialchars но при этом не испортить текст внутри тегов ...,
и т.д.

Вот так сделал, но не выбираются куски текста с начала и с конца строки, выбираются только куски между двух тегов:

Код: php
1.
2.
3.
4.
5.
6.
7.
preg_replace_callback( "#^|(\.*?\].*?\[/url\])(.+?)(\.*?\].*?\[/url\])|$#",
function ($matches) {
  echo "<pre>";
  print_r ($matches);
  echo "</pre>";
  return ( htmlspecialchars($matches[1]);
}, $text );
...
Рейтинг: 0 / 0
Регулярные выражения - как выбрать все куски текста кроме подстроки?
    #38566077
D_Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
блин, в предыдущем сообщении теги спарсились.
Не нужно готовых больших библиотек, нужна одна маленькая регулярка.
...
Рейтинг: 0 / 0
Регулярные выражения - как выбрать все куски текста кроме подстроки?
    #38566085
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D_Pavelмне нужно обработать текст функцией htmlspecialchars но при этом не испортить текст внутри тегов ... ,
и т.д.
Это очень сильно отличается от задачи описанной в самом начале. с этого и нужно было начинать.
...
Рейтинг: 0 / 0
Регулярные выражения - как выбрать все куски текста кроме подстроки?
    #38566092
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D_Pavel,

решайте задачу в общем случае. то есть надо найти всЁ что лежит ВНЕ ББ-кодов. неважно каких
...
Рейтинг: 0 / 0
Регулярные выражения - как выбрать все куски текста кроме подстроки?
    #38566114
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r u,

Код: php
1.
/(?<=^|\])[^\[\]]+?(?=\[|$)/i

так непойдет? выберет все что ВНЕ ЛЮБЫХ ББ кодов
...
Рейтинг: 0 / 0
Регулярные выражения - как выбрать все куски текста кроме подстроки?
    #38566117
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r u,

а нет.. выдернет еще и то что внутри открывающего и закрывающего.
в общем либотн надо несколькими регулярками, либо получится большая и медленная
...
Рейтинг: 0 / 0
Регулярные выражения - как выбрать все куски текста кроме подстроки?
    #38566158
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не знаю... может это говнокод, но в своё время я решал подобную задачу и делал это так:
1. вызываю preg_match_all для поиска всего, что менять не надо и запоминаю найденные значения
2. вызываю preg_replace и заменяю всё, что надо оставить без изменений, на некую комбинацию, которой заведомо нету в тексте (например "[$$]")
3. в получившейся строке делаю все требуемые замены
4. делаю explode получившейся строки по ставленному ранее разделителю ("[$$]").
5. запускаю for по получившемуся массиву и начинаю сборку новой строки вставляя между уже собранной частью и новой значение из массива, полученного в первом пункте, с соответствующим индексом.

на выходе получается нужное значение. Не думаю что это сильно оптимально... зато быстро и просто (по строке на каждый пункт + строчки 4 на последний, получается до десятка строк на всё).

Как бонус на выходе уже имеем отобранные значения из списка (мало ли, если там какие-то действия аля сохранения файлов надо сделать исходя из значений в тех же [img][/img])
...
Рейтинг: 0 / 0
Регулярные выражения - как выбрать все куски текста кроме подстроки?
    #38566174
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. думаю понятно, пункты 1 и 2 используют одну и ту же регулярку. Но на всякий случай уточняю :)
...
Рейтинг: 0 / 0
Регулярные выражения - как выбрать все куски текста кроме подстроки?
    #38566249
D_Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
D_Pavelмне нужно обработать текст функцией htmlspecialchars но при этом не испортить текст внутри тегов _=http://...]...,
и т.д.

Вот так сделал, но не выбираются куски текста с начала и с конца строки, выбираются только куски между двух тегов:

Код: php
1.
2.
preg_replace_callback( "#^|(\.*?\].*?\[/url\])(.+?)(\.*?\].*?\[/url\])|$#"  ,
function ($matches) {  print_r ($matches); }, $text );


А почему этот вариант не работает?
...
Рейтинг: 0 / 0
Регулярные выражения - как выбрать все куски текста кроме подстроки?
    #38566720
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр1. вызываю preg_match_all для поиска всего, что менять не надо и запоминаю найденные значения
ну так помогите ТСу, ему как раз нужна эта регулярка))
...
Рейтинг: 0 / 0
Регулярные выражения - как выбрать все куски текста кроме подстроки?
    #38566736
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r uПрограмёр1. вызываю preg_match_all для поиска всего, что менять не надо и запоминаю найденные значения
ну так помогите ТСу, ему как раз нужна эта регулярка))

а в чём сложность то? "#\\[img\\].*?\\[/img\\]#"
...
Рейтинг: 0 / 0
Регулярные выражения - как выбрать все куски текста кроме подстроки?
    #38566956
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёра в чём сложность то? "#\\[img\\].*?\\[/img\\]#"
в том что у него не только тег img, а еще куча других BB кодов, которые ненадо трогать
...
Рейтинг: 0 / 0
Регулярные выражения - как выбрать все куски текста кроме подстроки?
    #38566990
D_Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите почему это выражение не работает?

Код: php
1.
2.
3.
4.
$text = "начало текстаurl 1]ссылка 1середина текстаurl 2]ссылка 2конец текста";
preg_replace_callback( "#^|\.*?\].*?\[/url\](.+?)\.*?\].*?\[/url\]|$#",
	function ($matches) { echo "<pre>"; print_r ($matches); echo "</pre>"; }, 
	$text );



Выдает:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Array
(
    [0] => 
)

Array
(
    [0] => url 1]ссылка 1середина текстаurl 2]ссылка 2
    [1] => середина текста
)

Array
(
    [0] => 
)



А начало и конец текста не захватывает почему то.
...
Рейтинг: 0 / 0
Регулярные выражения - как выбрать все куски текста кроме подстроки?
    #38567042
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D_PavelПодскажите почему это выражение не работает?
потому что у вас нет выражения описывающего текст сначала и в конце.
^ это просто начало, какие либо данные туда не входят
тоже и с концом строки
...
Рейтинг: 0 / 0
Регулярные выражения - как выбрать все куски текста кроме подстроки?
    #38567047
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r uПрограмёра в чём сложность то? "#\\[img\\].*?\\[/img\\]#"
в том что у него не только тег img, а еще куча других BB кодов, которые ненадо трогать

Снова не вижу проблемы :) "#\\[([a-z]+) ([^\\]]+)\\](.*?)\\[/\\1\\]#"
в группах получаем название, параметры и текст.

И кстати, может я конечно где-то невнимательно читал, но разве автор хоть раз упоминал, что у него в тексте есть что-либо кроме img (в последующем заменено на url)?
...
Рейтинг: 0 / 0
25 сообщений из 56, страница 1 из 3
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Регулярные выражения - как выбрать все куски текста кроме подстроки?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]