![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
fantome |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 5.2.2007 Репутация: 1 Всего: 1 |
1one,
А если в отладчике ввалиться в функцию print и посмотреть, как она обработает эту строку? тоисть взять кусок из самой функции... ![]() |
|||
|
||||
1one |
|
||||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 26.6.2007 Репутация: 1 Всего: 1 |
Разве перловая функция написана на самом перле? Не думаю, что будет удачным преобразование с низкого уровня на уровень перла. |
||||
|
|||||
Nab |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
Ээээ нет, не нужно тут ставить новые задачи... Вы или сформулируйте вопрос однозначно или не морочьте голову, а то от первоначального вопроса мы уже ой как далеко ушли... Пример пожалуйста того, что может быть во входной строке, и то что должно в итоге получиться в выходной... -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
1one |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 26.6.2007 Репутация: 1 Всего: 1 |
да вопрос то все тот же, просто под разными углами формулирую. примеры: ------------ 1) на входе: ma\npa на выходе: ma pa ------------ 2) на входе: ma\\npa на выходе: ma\npa ------------ 3) на входе: ma\\\npa на выходе: ma\ pa ------------ 4) на входе: ma\\\\npa на выходе: ma\\npa ------------ |
|||
|
||||
nitr |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
Задача решаема не в одну строку, тут и "конечные автоматы" можно и многое другое - регеспы вам не в помощь! Можете сами посмотреть, вывод строки:
вывод одинаковый, а слешей больше ;) т.е.
так что пересмотрите задачу. Лучше, как советовал Nab - получить данные, которые можно обработать. |
||||
|
|||||
1one |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 26.6.2007 Репутация: 1 Всего: 1 |
На мой взгляд, решение существует именно в одну строку (на крайний случай - пара-тройка).
Всего то и нужно: идти _последовательно_ по строке (наверняка в регекспе будет фигурировать метасимвол \G) и заменять {\\ на \} и {\n на 0xA}. Причем операция замены {\\ на \} по приоритету выше, чем {\n на 0xA}. Вот и все. это и надо уместить в регексп(ы). |
|||
|
||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
1one, вы прочли предыдущее предложение. Perl понимает '\n' так же как и '\\n'
![]() |
|||
|
||||
Nab |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
1one, вы издеваетесь? Я привел решение, Вы начинаете говорить о левых переменных которые могут попасть в строку, и тут же приводите примеры входных строк без таких нюансов...
Вы бы для себя определились что хотите, а потом начали задавать вопросы.... И ответьче ЧЕМ КОНКРЕТНО НЕ УСТРАИВАЕТ МОЙ ВАРИАНТ? Все ваши примеры он по определению решает на УРА! -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
1one |
|
||||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 26.6.2007 Репутация: 1 Всего: 1 |
Nab, ты предложил решение eval "\$str = \"$str\""; Оно подходит, да. Если бы не одно НО: строка $str вводится пользователем, который может (случайно) написать во введенной строке как имена служебных переменных (типа $_ $% $@ $! и пр.), так и имя переменной (например, $str), которая существует в коде, в котором выполняется eval'ом эта самая строка. Соответственно, при выполнении eval туда подставится значение указанной переменной. Экранирование $ на \$ перед исполнением eval у меня проблемы не решило:
|
||||
|
|||||
JAPH |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 8.1.2007 Где: Ленобласть Репутация: 3 Всего: 23 |
Проверьте
Добавлено через 9 минут nitr,
Конечные автоматы.. А регекспы в перле как реализованы? По-моему, как раз НКА ![]() -------------------- Что непонятно - спрашиваем ![]() |
||||
|
|||||
1one |
|
||||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 26.6.2007 Репутация: 1 Всего: 1 |
JAPH, черт возьми, работает!!! =) Спасибо. Теперь вот разберусь че куда в етом регекспе. Почему модификатор e 2 раза и двойные qq... |
||||
|
|||||
nitr |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
ууууууууууууу
1one, вы сами себе противоречите!!!
вывод:
И все выши попытки - это подгон к результату. Если прочесть тему сначала, будет ясно почему... Добавлено через 3 минуты и 7 секунд JAPH, и вы внимательно прочтите...
РАЗНЫЕ ВЕЩИ! Я это специально привел как пример ;) гляньте на первые 3 поста, там 1one, как бы уточняет суть вопроса и приводит пример, достаточно точный. Добавлено через 4 минуты и 24 секунды точнее даже на этом ярче видно:
|
||||||||
|
|||||||||
1one |
|
||||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 26.6.2007 Репутация: 1 Всего: 1 |
Задачка решена. Nitr, Nab, вам тоже спасибо за обсуждение. ps: Nitr, я выразился неточно значит. В цитате "то же самое" надо, видимо, заменить на "почти то же самое". Я не знал, что perl пакостит с ('\n' eq '\\n'). В общем, всем thanks, specially thanks for JAPH. |
||||
|
|||||
JAPH |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 8.1.2007 Где: Ленобласть Репутация: 3 Всего: 23 |
![]() Меня несколько смущает следующее:
Сравните выводы 1 и 2, а затем то, что с ними сделали 3 и 4. ![]() Добавлено @ 14:10 nitr, дык я тоже как пример.. А что касается первых трёх постов, так я и не встревал, так как не мог чётко сформулировать задачу... А так, в ходе многочисленных рассуждений прояснилось... ![]() 1one, perl не пакостит! просто в одинарных кавычках он заменяет только \\ и \', \n он не знает и оставляет как есть. ![]() Это сообщение отредактировал(а) JAPH - 27.6.2007, 14:19 -------------------- Что непонятно - спрашиваем ![]() |
|||
|
||||
1one |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 26.6.2007 Репутация: 1 Всего: 1 |
в общем, работает на основе того, что eval от, например, qq(qq(\\\\)) дает нужный результат. Причем qq начинают интерполироваться из внутренних скобок самые первые.. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |