![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
AndreyCH |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 24.9.2007 Репутация: нет Всего: нет |
Вот для моего класса нужен метод, который распарсит строку и вычленить оттуда название тэга и его значение.
есть 2 метода. 1. файл util.pl
2. XML файл, который будем разбирать users.xml
Ну и код которым парсим test.pl
Это сейчас так работает. А вот это хочу сделать для обучения: Есть вышеприведенный XML файл. Сразу скажу: "Формирую его только я и никто другой, структура заранее известна и приведена в файле". ![]() ![]() Так вот я хочу сделать вот так: Открыл файл. Нашел первый тэг (целое слово внутри угловых скобок). Получил имя этого тэга $1. Нашел закрывающий тэг $3 (по полученному имени) и все что внутри $2. Перешел к обработке второго тэга, третьего и т.д. Меня интересует именно "академически" как это сделать внутри одного рег. выражения. Не хотелось бы сначала первым рег. выражением получать первый тэг, затем с помощью GetTagData (см. выше) получать все остальное. |
||||||
|
|||||||
klem4 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 27.7.2008 Репутация: 2 Всего: 2 |
Вам нужно построить деревто чтоли ? Лучьше рекурсивную функцию написать мне кажется чем пытаться регуляркой это сделать.
Что вы хотите получить регуляркой от такого xml:
? |
|||
|
||||
KSURi |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
AndreyCH, да, вы выбрали неверный метод для изучения регексов
-------------------- Died at Life.pl line 21 |
|||
|
||||
AndreyCH |
|
||||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 24.9.2007 Репутация: нет Всего: нет |
Народ, ну что вы в самом деле! ;-)
![]() ![]() Поясню. На первом проходе обработается только один тэг <user_list> (он и является единственным элементом массива)во втором проходе обработаем уже только
соответсвенно все что внутри <user> добавляем в первый элемент нового массива, все что внутри <list> второй и так далее обрабатываем внутрь. Теперь перефразирую вопрос.
где $tag - это собственно и есть название тэга. вот как мне написать регулярное выражение чтобы до этой операции находилось название тэга... А уж потом сделолсь тоже что и в приведенном примере. И все это внутри одного регэкспа. PS а вот тут уже можно и регэкспам поучиться. ![]() |
||||
|
|||||
KSURi |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
В $2 окажутся данные из тэга Добавлено через 1 минуту и 54 секунды
-------------------- Died at Life.pl line 21 |
||||
|
|||||
AndreyCH |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 24.9.2007 Репутация: нет Всего: нет |
Ну и умучился я!!! Помощи и разъяснения душа просит!!!
![]() итак. xml файли остался прежним - (смотри пред ответ)
и$data1 и$data2 undef и я код так мучил и по-другому и вот до чего дошел если меняем регулярку на
на выходе имеем $data1 = "user_list" как и должно быть. ![]() теперь меняем на
и оппа! $data1 = "id" (это-то откуда взялось!!!) $data2 = "3" (еще одно "чудо в решете") Народ ну объясните что за... ? ![]() Ну и наконец как толко беру исходное -
В чем же тут дело? |
||||||||
|
|||||||||
amg |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
AndreyCH, для начала замените исходную регулярку на логичную для Вашего случая
/<(.+?)>(.+?)<\/\1>/s и с ней уже экспериментируйте Строка то у Вас многострочная (поэтому нужен модификатор /s), и в закрывающем тэге есть слеш. Это сообщение отредактировал(а) amg - 21.3.2009, 11:01 |
|||
|
||||
SkoobyDoo |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.10.2007 Репутация: нет Всего: нет |
AndreyCH,
регексп поменяйте на
Это сообщение отредактировал(а) SkoobyDoo - 21.3.2009, 13:35 |
||||||
|
|||||||
KSURi |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
упс) спасибо за поправку -------------------- Died at Life.pl line 21 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |