информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Где водятся OGRыПортрет посетителяСтрашный баг в Windows
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
Ещё способ придумал (что бы для полноты картины) 02.04.05 05:00  Число просмотров: 2171
Автор: Heller <Heller> Статус: Elderman
Отредактировано 02.04.05 05:06  Количество правок: 1
<"чистая" ссылка>
$temp=~s/[qwerty]+/$t=$&;$t=~s#[et]*$##;"something$&"/e;
В общем-то немного более запутано, но зато нет постоянных возвратов [qwerty]+ c целью поиска наибольшего [et]*.

Заодно ещё вопрос возник. Регулярные выражения ведь ведут поиск слева направо. А если используется $ как символ физического конца строки? Всё равно? Или уже наоборот?
<programming>
[Perl] Вопрос по регулярным выражениям 31.03.05 23:59  
Автор: Heller <Heller> Статус: Elderman
<"чистая" ссылка>
Потребовалось сделать следующую замену: в некоторой строке нужно заменить на что-то (к вопросу это не относится) последовательность символов типа [someclass]+ (то есть самая длинная последовательность символов какого-то класса). При этом есть условие - эта последовательность не должна заканчиваться опеределёнными символами (одним или нескольким) из этого класса.

Например, если класс [qwerty], запрещённые символы [et], замена идёт на 'something', то из строки 'ajkwyeuw' я должен получить 'ajksomethinguw'. Как это сделать ума не приложу. Можно, конечно, написать подпрограмму, которая будет заниматься поиском по "стандартным" алгоритмам, но хотелось бы обойтись малой кровью, т. е. регулярными выражениями (важное условие - максимум одним, не считая (?...), т. к. там есть ещё не относящиеся к теме нюансы).

Заранее благодарен.
[Perl] Я немного не понял 01.04.05 16:57  
Автор: NKritsky <Nickolay A. Kritsky> Статус: Elderman
<"чистая" ссылка>
> Например, если класс [qwerty], запрещённые символы [et],
> замена идёт на 'something', то из строки 'ajkwyeuw' я
> должен получить 'ajksomethinguw'. Как это сделать ума не
> приложу. Можно, конечно, написать подпрограмму, которая
> будет заниматься поиском по "стандартным" алгоритмам, но
> хотелось бы обойтись малой кровью, т. е. регулярными
> выражениями (важное условие - максимум одним, не считая
> (?...), т. к. там есть ещё не относящиеся к теме нюансы).

в этом случае ты должен получить вроде бы ajksomethingeuw -ведь самая длинная разрешенная последовательность - wy

анивей - вот например так:
perl -e '$x="ajkwyeuw" ; $x=~s/[qwerty]+([^et])/something$1/g ; print "$x \n";'
ajksomethinguw

уж не знаю насколько это будет верно в остальных случаях. :)
Да, это я уже сам в примере напутал. Именно так. 01.04.05 23:12  
Автор: Heller <Heller> Статус: Elderman
<"чистая" ссылка>
> в этом случае ты должен получить вроде бы ajksomethingeuw
> -ведь самая длинная разрешенная последовательность - wy
Да, это я уже сам в примере напутал. Именно так.

> анивей - вот например так:
> perl -e '$x="ajkwyeuw" ;
> $x=~s/[qwerty]+([^et])/something$1/g ; print "$x \n";'
> ajksomethinguw
>
> уж не знаю насколько это будет верно в остальных случаях.
> :)
Заработало :) Спасибо. Только строка поиска должна быть /[qwerty]+([^et]*)/, т. к. он не должен учитывать все конечные символы из этого класса. Но тут я уже разобрался :)
Ещё способ придумал (что бы для полноты картины) 02.04.05 05:00  
Автор: Heller <Heller> Статус: Elderman
Отредактировано 02.04.05 05:06  Количество правок: 1
<"чистая" ссылка>
$temp=~s/[qwerty]+/$t=$&;$t=~s#[et]*$##;"something$&"/e;
В общем-то немного более запутано, но зато нет постоянных возвратов [qwerty]+ c целью поиска наибольшего [et]*.

Заодно ещё вопрос возник. Регулярные выражения ведь ведут поиск слева направо. А если используется $ как символ физического конца строки? Всё равно? Или уже наоборот?
Зависит от реализации? 03.04.05 17:09  
Автор: NKritsky <Nickolay A. Kritsky> Статус: Elderman
<"чистая" ссылка>
вобщем man perlre
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach