![]() |
|
Модераторы: 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. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |