Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изменение содержимого текстовго файла 
:(
    Опции темы
amg
Дата 8.11.2007, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(ma_lover @  8.11.2007,  12:16 Найти цитируемый пост)
C еденичкой работает, но удаляет пробелы и из заголовка, который трогать нельзя.. Кстати, какую роль играет еденичка??
Да, был косяк. Уточним регэксп:
Код
1 while $str=~s/(?<=\s[\dA-F]{2})\s\s+((?:[\dA-F]{2}(?:\s|$))*)$/ $1/;
Единичка служит телом цикла, означая "ничего не делать".

Цитата(ma_lover @  8.11.2007,  12:16 Найти цитируемый пост)
Код подсчитывает количество "двойных" символов в строке:B4 DA 25 C5  02 40 1A  00 1E  00  01  00 60  01  0A. Если учесть, что в [\dA-F]{2}, заключённое в квадратные скобки  даёт нам класс символов, то получим, что это выражение должно искать дважды повторённую цифру или букву..Но также нужно учитывать и комбинации цифра-буква и буква-цифра, типа 1E..Судя по результату, это выражение всё же учитывает и комбинации, потому что в счётчике хранится общее количество двойных символов.Вот я бы и хотел уточнить , почему это так, может я чего-то не понимаю.
Понятно. [\dA-F] - это символ, представляющий собой цифру или букву (от A до F), порядок перечисления внутри квадратных скобок не важен. [\dA-F]{2} - это два таких символа.
PM MAIL   Вверх
ma_lover
Дата 8.11.2007, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 24.3.2007

Репутация: нет
Всего: нет



Да, работает, спасибо!



Это сообщение отредактировал(а) ma_lover - 8.11.2007, 14:27
PM MAIL   Вверх
ma_lover
Дата 8.11.2007, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 24.3.2007

Репутация: нет
Всего: нет



Можно только небольшое пояснение по поводу работы оператора s/ / /...Насколько пишут в книгах, он заменяет одно поле другим...то есть в нашем случае:
Код

1 while $str=~s/(?<=\s[\dA-F]{2})\s\s+((?:[\dA-F]{2}(?:\s|$))*)$/ $1/;


 $1 должно была бы заменить последовательность из двух шестнадцатиричных символов с сопровождающими их пробелами..В данном случае этому препятствует символ отрицания захвата":?" или как?.Можно пояснить?.
Спасибо.
PM MAIL   Вверх
amg
Дата 8.11.2007, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Код

1 while $str=~s/(?-ism: # далее будет регэксп без опций ism, но с опцией x, чтобы позволить пробелы и комментарии

# Регэксп состоит из 4-х частей

(?<=\s[\dA-F]{2}) # 1-я часть, нулевой длины

\s\s+             # 2-я часть, два и более пробела

(                 # 3-я часть, в захватывающих скобках (пойдет в $1)
  (?:               # открываем группу (без захвата)
    [\dA-F]{2}       # число
    (?:\s|$)         # за ним - пробел либо конец строки, в незахв. скобках, чтобы ограничить действие ИЛИ
  )*                # закрываем группу и эта группа повторяется сколько угодно раз
)                 # конец 3-й части

$                 # 4-я часть, конец строки, нулевой длины

)/ $1/;        # конец действия опции x и замена

PM MAIL   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0628 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.