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

12
Ilekor
На сайте с 22.04.2009
Offline
138
809

Друзья, помогите!

Голова кипит уже, не могу понять в чем причина не срабатывания регулярки при внутренних данных HTML. Если данные без HTML все срабатывает.

Дано:

$page = "[SHUFTXT]<li>Русский</li>
||<li>Английский</li>
||[SHUFTXT]<li>Испански</li>
||<li>Чешский</li>
||<li>Украинский</li>[/SHUFTXT]
[/SHUFTXT]";

Обработка:

$regular = "/\[SHUFTXT\]([^\[SHUFTXT\]\[\/SHUFTXT\]]+)\[\/SHUFTXT\]/";
preg_match_all($regular, $page, $matches);
var_dump($matches[1]);die();

Укажите где в регулярке не хватает чего?

Лучший дорген 21 века AgDor(http://agdor.info)
WoWeb
На сайте с 18.08.2015
Offline
5
#1
Ilekor:
Друзья, помогите!
Голова кипит уже, не могу понять в чем причина не срабатывания регулярки при внутренних данных HTML. Если данные без HTML все срабатывает.

Дано:


Обработка:


Укажите где в регулярке не хватает чего?

Я конечно нуб в php но может кавычки сменить на '

Создание SEO оптимизированных сайтов | Продвижение сайтов (http://woweb.com.ua/)
LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#2

$regular = "@\[SHUFTXT\]([^\[SHUFTXT\]\[\/SHUFTXT\]]+)\[\/SHUFTXT\]@smi";

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
Ilekor
На сайте с 22.04.2009
Offline
138
#3
LEOnidUKG:
$regular = "@\[SHUFTXT\]([^\[SHUFTXT\]\[\/SHUFTXT\]]+)\[\/SHUFTXT\]@smi";

Спасибо, но с добавлением модификаторов все равно ничего не происходит, массив все также пустой, я уже пробовал. Что то во внутренней регулярке не так, как выяснил не срабатывает если есть коды </tag>.

Тест можно сделать здесь http://www.uvsoftium.ru/php/regexp.php

lutskboy
На сайте с 22.11.2013
Offline
172
#4

А что конкретно вам нужно вытащить отсюда?

$page = "[SHUFTXT]<li>Русский</li>
||<li>Английский</li>
||[SHUFTXT]<li>Испански</li>
||<li>Чешский</li>
||<li>Украинский</li>[/SHUFTXT]
[/SHUFTXT]";
LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#5
lutskboy:
А что конкретно вам нужно вытащить отсюда?

+1

Что вы хотите получить?

Ilekor
На сайте с 22.04.2009
Offline
138
#6
LEOnidUKG:
+1
Что вы хотите получить?

Перемешать входящие данные в этих макросах, также и из вложенных.

LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#7
Ilekor:
Перемешать входящие данные в этих макросах, также и из вложенных.

Перемешать? По русски говорите. Какие ещё макросы?

Вы что хотите достать? ТЗ поставьте нормально.

---------- Добавлено 29.08.2015 в 21:36 ----------

Нужно то что, внутри вторых SHUFTXT?

$regular = "@\[SHUFTXT\].*?\[SHUFTXT\](.*?)\[/SHUFTXT\].*\[/SHUFTXT\]@smi";

Graffy
На сайте с 05.05.2012
Offline
48
#8

Как я понял, ТС хочет регуляркой вытащить все что между всеми макросами [SHUFTXT] и [/SHUFTXT], затем взять все что вытащил и перемешать, но тут проблема скорее во вложенности одних макросов в другие.

AnyTubes Dorgen v2 (/ru/forum/comment/14276302)
Ilekor
На сайте с 22.04.2009
Offline
138
#9
LEOnidUKG:
Перемешать? По русски говорите. Какие ещё макросы?
Вы что хотите достать? ТЗ поставьте нормально.

---------- Добавлено 29.08.2015 в 21:36 ----------

Нужно то что, внутри вторых SHUFTXT?

$regular = "@\[SHUFTXT\].*?\[SHUFTXT\](.*?)\[/SHUFTXT\].*\[/SHUFTXT\]@smi";

Я не расписывал потому как думал что и так будет понятно.

Распишу, нужно получить данные из [SHUFTXT]тут данные[/SHUFTXT], но [SHUFTXT] иногда может содержать внутри себя еще [SHUFTXT]тут данные [SHUFTXT]тут данные[/SHUFTXT] [/SHUFTXT] (вложеный), регулярка должна была брать сначала внутрение, если нет внутренних то внешний

пример работающего регулярного выражения


$page = "{<li>Русский
||<li>Английский
||{<li>Испански</div>
||<li>Чешский</div>
||<li>Украинский</div>}
}";

$regular = "@\{([^\{\}]+)\}@smi";
preg_match_all($regular, $page, $matches);
print_r($matches);die();

пример полностью рабочий с этими разделителями, а вот с моими [SHUFTXT] не пашет, вот в чем соль не пойму.

alexvaleev
На сайте с 04.02.2010
Offline
55
#10

Попробуйте вот так: https://regex101.com/r/mX4nO3/1

Изначальная регулярка не работает, потому что в список запрещенных занесен символ "/", который используется в закрывающих тэгах li.

Блог (http://alexvaleev.ru) Всем роуп! (https://rujump.ru/)
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий