powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Регулярные выражения - как выбрать все куски текста кроме подстроки?
6 сообщений из 56, страница 3 из 3
Регулярные выражения - как выбрать все куски текста кроме подстроки?
    #38568475
D_Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На таком примере выдает ошибку 500!
Код: php
1.
Premature end of script headers: php


Что делать?

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
$tags = '(img|url|code)';
$tagsn = '(?:img|url|code)'; 
$bbsmsg = "\[$tags(?:[^[]|\[(?!/?$tagsn))+\[/\g{-1}]";
$regex = "(?:$bbsmsg|^)\K.+?(?=$bbsmsg|$)";

$text='[code]D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
       SF GF G DSF GSDF GD FGD FGS DFGS FD GSDF GSDF GSDF GFD GSD DS `P
      D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
       DFG DF DF DF HFG HFD HFG HFD HF HFD GHDF GHFD GF HDFGHFG HFD HFG
      D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD 
      D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
      D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
      D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
     D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
     D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
    D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
    D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
   D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
   D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
    D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
    D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
    D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
   D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
    D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
   D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
  D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
  D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
  D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
  D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
    D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
   D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
   D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
     D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
     D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
      D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
     D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
      D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
     D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
      D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
      D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
     D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
    D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
   D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
D GDSF GDF GFD GFD GSDF G SF GDSF GSDF GSDF GDSF GDSF GDF GD SD
DS';

preg_replace_callback(
  "#$regex#",
  function ($matches) { echo '<pre>'; print_r ($matches); echo '</pre>'; }, 
  $text );

...
Рейтинг: 0 / 0
Регулярные выражения - как выбрать все куски текста кроме подстроки?
    #38568478
D_Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
r uD_PavelЭто то что надо, спасибо!
а как же?
D_PavelСлишком много букв.
)) Когда не много букв как в этом варианте - мне нравится.
...
Рейтинг: 0 / 0
Регулярные выражения - как выбрать все куски текста кроме подстроки?
    #38568529
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D_Pavelr uпропущено...

а как же?
пропущено...

)) Когда не много букв как в этом варианте - мне нравится.

Не понимаю я Вас. Вы экономите буквы, убивая читабельность и производительность. Вот сейчас составили регулярное выражение, которое Вам понравилось и уже сколько проблем с отладкой.

D_PavelБлин зачем вы все время слэши удваиваете? Так ведь их смысл теряется!
ровно наоборот... представим, что нам надо выцепить комбинацию "\t" из строки... Только не символ табуляции, а именно 2 символа, что я написал.
Как Вы напишите регулярку? "#\\t#"? а я напишу "#\\\\t#" и буду прав.
Дело в том, что Ваш двойной бэкслеш будет заменён на один (ну как обычно при вводе строки один слэш экранируется другим)... А потом в саму регулярку уйдёт выражение "\t", то есть поиск символа табуляции... И это приведёт к долгому мозгованию что же не так. А представляется сложную регулярку с такой ошибкой? Потому, хоть в данном случае таких нюансов нету, однако я привык писать регулярки именно так, дабы в случае чего не искать часами мелкие ошибки.

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

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

Как бонус на выходе уже имеем отобранные значения из списка (мало ли, если там какие-то действия аля сохранения файлов надо сделать исходя из значений в тех же [img][/img])

Можно обойтись одним вызовом регулярки. Я так сделал:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
$arr = explode ( $delimiter, preg_replace_callback( "#$regex#si",
	function ($matches) {
		global $arrtag;
		$arrtag[] = $matches[0];
		return ( $delimiter );
	},
	$originaltext ) );
foreach ($arr as $key => $text) {
	$newtext .= "$text{$arrtag[$key]}";
}
...
Рейтинг: 0 / 0
Регулярные выражения - как выбрать все куски текста кроме подстроки?
    #38568645
D_Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПрограмёрПросто php проверяя, что такой комбинации нету, оставляет слэш нетронутым. А! Так вот в чем дело! Я думал так надо раз ПХП не выдает ошибку. Перл бы выдал.
...
Рейтинг: 0 / 0
Регулярные выражения - как выбрать все куски текста кроме подстроки?
    #38568702
D_Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл добавить еще global $delimiter.
...
Рейтинг: 0 / 0
6 сообщений из 56, страница 3 из 3
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Регулярные выражения - как выбрать все куски текста кроме подстроки?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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