![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
amg |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
С виду простая задачка:
есть строка $_ = 'aXbX<a>cXbX</a>eXgXaXbX<a>cXbX</a>eXgX'; нужно заменить X на У, но не везде, а только внутри тэгов. Т.е. должно получиться aXbX<a>cYbY</a>eXgXaXbX<a>cYbY</a>eXgX Понятно, что можно выкусить нужные подстроки, сделать в них замены и вставить обратно, либо как-то так:
Но верится, что что так просто формулируемая задачка не решается обыкновенным регулярным выраженим, без выполнения дополнительного кода: что-то подобное уже было, и тогда нашлось потрясающе элегантное решение. |
|||
|
||||
Nab |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
У меня пока получилось вот такое
Но учитывая что \G без предыдущего совпадения соответствует ^, то в подстроке желательно убрать лидирующий текст до первого тега... Буду думать еще, может и нарисуюю работающий вариант... -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
Nab |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
Сейчас есть решение, не в одну регулярку а в две
![]() первой просто позиционирую первую pos для \G:
-------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
JAPH |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 8.1.2007 Где: Ленобласть Репутация: 3 Всего: 23 |
У меня такое, которому далеко до совершенства:
-------------------- Что непонятно - спрашиваем ![]() |
|||
|
||||
JAPH |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 8.1.2007 Где: Ленобласть Репутация: 3 Всего: 23 |
Уложился в одну регулярку. Насколько элегантно - не знаю..
![]()
Добавлено @ 16:25 Преимущества - применима к замене не только одного символа. Недостатки - длинная ![]() Это сообщение отредактировал(а) JAPH - 12.7.2007, 16:30 -------------------- Что непонятно - спрашиваем ![]() |
|||
|
||||
amg |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
Nab, JAPH, как всегда, на высоте! Спасибо большое. Может настанут, наконец, те светлые времена, когда и я буду понимать, как работает \G
Но я, как всегда, перемудрил с вопросом. Засада в том, что в на самом деле мне нужно заменять не X на Y, а < и > на < и > соответственно. |
|||
|
||||
JAPH |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 8.1.2007 Где: Ленобласть Репутация: 3 Всего: 23 |
Так с этого и надо было начинать! (:
Ну, скорее, недомудрили ![]() Одной регуляркой без 'e' уже не обойтись, так как возможностей замены две.
Немного подумав Хотя.. ![]()
Это сообщение отредактировал(а) JAPH - 13.7.2007, 13:50 -------------------- Что непонятно - спрашиваем ![]() |
||||
|
|||||
amg |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
JAPH, гениально! Твое решение даже легко вполне универсальным сделать.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |