![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| MakTpaxep |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 25.11.2010 Репутация: нет Всего: нет |
Всем привет.
Задача:
Заменить на:
В принципе, задача для какого-нибудь xml'ного модуля, но интересно можно ли сделать одним регом? |
||||
|
|||||
| alezzz |
|
|||
![]() сплю... ![]() ![]() Профиль Группа: Участник Сообщений: 499 Регистрация: 17.8.2009 Репутация: 1 Всего: 14 |
|
|||
|
||||
| afiskon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 31.3.2011 Где: Россия, Москва Репутация: нет Всего: 4 |
||||
|
||||
| MakTpaxep |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 25.11.2010 Репутация: нет Всего: нет |
||||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
# print '<tag att="first"><tag att="second">asd</tag>qwe<tag att="second">asd</tag>zxc</tag>' | perl -plne 'while (s#<tag att="([^"]*)">((?:.(?!<tag))*?)</tag>#<$1>$2</$1>#) {};'
<first><second>asd</first>qwe<second>asd</second>zxc</second> # |
|||
|
||||
| alezzz |
|
|||
![]() сплю... ![]() ![]() Профиль Группа: Участник Сообщений: 499 Регистрация: 17.8.2009 Репутация: 1 Всего: 14 |
||||
|
||||
| afiskon |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 31.3.2011 Где: Россия, Москва Репутация: нет Всего: 4 |
Мне вот тоже интересно. Во-первых, [a-z0-9] не идентично \w. Во-вторых, \d в perl 5.14 и \d в perl < 5.14 работают по-разному, так что если нужен [0-9], лучше писать [0-9]. |
||||
|
|||||
| MakTpaxep |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 25.11.2010 Репутация: нет Всего: нет |
Действительно. Как мы это будем решать? Или даже так
У меня вроде появились мысли с использованием рекурсии и модификатором e. Попробую сейчас оформить) Чтобы не раздувать код. Ещё когда utf8 входные - [a-z] не опишут всех букв) А [0-9] вроде эквивалентно \d, разве нет? Это сообщение отредактировал(а) MakTpaxep - 5.7.2011, 12:56 |
|||
|
||||
| alezzz |
|
|||
![]() сплю... ![]() ![]() Профиль Группа: Участник Сообщений: 499 Регистрация: 17.8.2009 Репутация: 1 Всего: 14 |
Вот, кажется так точнее будет:
|
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
неужели сложно проверить?
# print '<tag att="first"><tag att="second">second 1</tag>first 1<tag att="second">second 2</tag>first 2</tag>' | perl -0777 -plne 's#<tag att="([^"]*)">((?:(?!<tag).)*?)</tag>#<$1>$2</$1>#gsm' <tag att="first"><second>second 1</second>first 1<second>second 2</second>first 2</tag> # |
|||
|
||||
| alezzz |
|
||||
![]() сплю... ![]() ![]() Профиль Группа: Участник Сообщений: 499 Регистрация: 17.8.2009 Репутация: 1 Всего: 14 |
и в каком месте ошибка?
Добавлено через 2 минуты и 16 секунд я не через /g делал, а в цикле Это сообщение отредактировал(а) alezzz - 5.7.2011, 13:16 |
||||
|
|||||
| MakTpaxep |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 25.11.2010 Репутация: нет Всего: нет |
alezzz, спасибо.
|
|||
|
||||
| MakTpaxep |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 25.11.2010 Репутация: нет Всего: нет |
Итого "<qwe att=2>aaaaa<1>bbbbbbbbb</qwe>cccccc</1>". Почему не получается? Пардон:
но тогда выходит
Без while не обойтись видимо... Это сообщение отредактировал(а) MakTpaxep - 2.11.2011, 19:05 |
||||||
|
|||||||
| alezzz |
|
|||
![]() сплю... ![]() ![]() Профиль Группа: Участник Сообщений: 499 Регистрация: 17.8.2009 Репутация: 1 Всего: 14 |
без while этим способом не получится, модификатором global можно только ускорить
|
|||
|
||||
| tishaishii |
|
|||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: 4 Всего: 8 |
Это сообщение отредактировал(а) tishaishii - 4.11.2011, 21:54 |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |