powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Кто на регулярных выражениях собаку съел? Подскажите...
25 сообщений из 85, страница 3 из 4
Кто на регулярных выражениях собаку съел? Подскажите...
    #34938080
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoимхо, правильно пробел выводит, попробуй пробел после ААА стереть

и чо ? выдала тот же пробел
вообще какую задачу то решаем ???
Та что в первом посте подразумевает ответ DDD (три раза IMHO)
Так что если это и решение, то увы неизвестно какой задачи
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34938106
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoпопробуй так
AAA((?:[^Z]|Z(?!ZZ))*)BBB

зы перл – здло и АДЪ следует за ним

Так работает
концептуальненько

А кто у нас седня добро ? awk или egrep ???
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34938162
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
добро – это С#
в крайнем случае С++

Gluk (Kazan)и чо ? выдала тот же пробелхмм… или перл не умеет в регулярными выражениями работать, или ты где-то не там пробел стёр.
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34938167
Tellur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)
Кстать, не работает ни фига
ни так:

Код: plaintext
1.
2.
3.
4.
5.
$_ = 'CCC AAA DDD BBB ZZZ BBB ZZZ FFF';

if (/AAA([^Z]|Z(?!ZZ))+BBB/) {
   print "$1\n";
}

ни так:

Код: plaintext
1.
2.
3.
4.
5.
$_ = 'CCC AAA DDD BBB ZZZ BBB ZZZ FFF';

if (/AAA([^Z]|Z(?!ZZ))*BBB/) {
   print "$1\n";
}

Почему не работает разбираться было лениво, господа теоретики

мне тоже лень разбираться почему у Вас не работает. Уменя На PHP прекрасно работает
AAA([^Z]|Z(?!ZZ))+BBB

и для CCC AAA DDD BBB ZZZ BBB ZZZ FFF и для... ЛЮБЫХ других случаев. хоть рандомом забивай строку.
Но я так подозреваю в $1 у вас будет содержимое первой скобки а не всего совпадения - поэтому там и пробел.

Код: plaintext
1.
2.
3.
<?php
  if (preg_match("/AAA([^Z]|Z(?!ZZ))+BBB/", "CCC AAA DDD BBB ZZZ BBB ZZZ FFF", $m)) print_r($m); else print "NO";
?>
в результате получаем
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Content-type: text/html
X-Powered-By: PHP/4.3.1

Array
(
    [0] => AAA DDD BBB
    [1] =>
)

то есть нулевой элемент - все совпадение, а начиная с 1 - паттерны выделеные скобками идут
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34938177
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все я прогнал
согласен
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34938181
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoдобро – это С#
в крайнем случае С++


Хорошо что не VB.NET
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34938183
Tellur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan) maXmoпробел выводит

А должно DDD ;)

не должно в скобках один символ всего

если бы /AAA(([^Z]|Z(?!ZZ))+)BBB/ тогда в $1 было бы " DDD " а в $2 пробел

это же основы
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34938197
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tellur Gluk (Kazan) maXmoпробел выводит

А должно DDD ;)

не должно в скобках один символ всего

если бы /AAA(([^Z]|Z(?!ZZ))+)BBB/ тогда в $1 было бы " DDD " а в $2 пробел

это же основы

я же сказал, выше что прогнал
я сюда заскакиваю урывками в свободное от основной работы время
когда смотришь мельком можно еще не так лохануться, так что не надо про основы
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34938211
Tellur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)
я же сказал, выше что прогнал
я сюда заскакиваю урывками в свободное от основной работы время
когда смотришь мельком можно еще не так лохануться, так что не надо про основы

сорри когда я начинал писать пост вашего еще не было, разница в минуту всего - сами посмотрите
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34938269
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tellur
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Content-type: text/html
X-Powered-By: PHP/4.3.1

Array
(
    [0] => AAA DDD BBB
    [1] =>
)
странно… а почему только первая скобочка промачилась? Думал, их будет по числу символов – штук пять.
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34938281
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tellur Gluk (Kazan)
я же сказал, выше что прогнал
я сюда заскакиваю урывками в свободное от основной работы время
когда смотришь мельком можно еще не так лохануться, так что не надо про основы

сорри когда я начинал писать пост вашего еще не было, разница в минуту всего - сами посмотрите

Если забыть о том, что выражение надо вычислять динамически, то решение в принципе нормальное. Единственно, что на однобуквенных подстроках будет частный случай с изменением структуры выражения. Но простой поиск строки с последующим поиском в найденном безусловно будет эффективнее
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34940617
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мдаааа

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
$A = 'AAA';
$B = 'BBB';
$Z = 'ZZZ';

$_ = 'DDD AAA FFF BBB ZZZ BBB ZZZ EEE';

if (/$A(?:(?!$Z).)*$B/) {
   print "$&\n";
}

Удивительно, что это не пришло в голову сразу :)
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34940677
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoдобро – это С#


Теперь немножко лирики про извечную борьбу
Бобра сО слом:

1. На сегодня машинка регулярных выражений Perl наиболее заоптимизированная из всехсуществующих.
2. В части нововведений в RegExp, Perl всегда был законодателем мод, расширения 5-ой версии уже стали фактическим стандартом.
3. .Net в настоящий момент вводит новые фичи, отсутствуюшие в Perl и их нововведения безусловно интересны и достойны всяческого внимания, но:
3.1 Некоторая часть нововведения (как например разбор справа налево) откровенно сыра и не готова для практического использования.
3.2 Относительно набившей оскомину задачи проверки баланса скобок, решение предлагаемое Perl (возможность применения рекурсии) мне представляется несколько более универсальным чем финт приедложенный .Net-ом с определением уровня вложенности с использованием именованных сохранений (хотя возможно я просто не до конца вкурил последнее).
3.3 В отличии от .Net в Perl регулярные выражения интегрированы (про C# врать не буду, но в Java вереницы бакслешей (в частности) просто убивают).
3.4 Самое большое, что мне не нравится в .Net, то что его разработчики сознательно и последовательно игнорируют принцип нулевых издержек . Я не хочу платить за функционал (Capture), который не использую (и который вообще вряд ли кто нибудь когда то будет использовать).
3.5 Возможность использования делегатов при подстановке достойна восхищения, но возможности Perl-а в этом отношении никак не меньше.
3.6 Пожалуй единственная действительно ценная возможность предоставляемая .Net и отсутствующая в Perl - ретроспективные проверки произвольной ширины, но и она в подавляющем количестве случаев всего лишь позволит тормознуть крутейший пень непосильным количеством возвратов.
3.7 Документация по regexp-ам у .Net - говно

Плавно переходим к части не связанной с регулярными выражениями:

Совсем недавно, одному из наших заказчиков срочно занадобилась подсистема виртуального хостинга, интегрируемая с нашей биллинговой системой. После того как все остальные разработчики отказались за нее браться (сославшись на откровенно нереальные сроки), я не имея предварительных наработок в этой области, сделал ее за 2 недели (отдельное спасибо CPAN) в связке (Perl+PL/SQL), попутно освоив Perl, некоторые тонкости DNS, CommunigatePro, LDAP, виртуальный хостинг на Apache, MySQL для задач виртуального хостинга и развертывание всего этого добра под Windows и Solaris.
Весь модуль - несколько таблиц, пакетов PL/SQL, JOB-ов и запускаемых по cron или at скриптов Perl (в количестве 9 штук общим объемом не более 700 строк с подробным комментированием), которые немедленно передал на сопровождение другому сотруднику, попутно показав, что писать сопровождаемый софт на Perl можно .
Что то мне подсказывает, что выбери я C# или даже C++, мне было бы низачто не уложиться в озвученные сроки.
Немалую роль сыграла и кроссплатформенность Perl, поскольку заказчик хотел видеть реализацию на солярке.

Теперь о меркантильном:

Perl - бесплатен . Безусловно и для любого использования (и по заверениям создателей навсегда таковым и останется). Более того, по всему миру разбросаны десятки тысяч энтузиастов, разрабатывающих бесплатные модули для решения всевозможных задач. Фактически, разработать собственный востребованный модуль Perl очень сложно по одной только причине - скорее всего он уже написан, тщательно задокументирован и выложен на CPAN.

Все это сказано про Perl - который Вы считаете Злом,
а что хорошего ВЫ можете рассказать о столь любимом вами
Порождении Империи Добра ???
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34940861
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)Мдаааа...
...
/$A(?:(?!$Z).)*$B/
... Удивительно, что это не пришло в голову сразу :)
Забавно, именно сегодня утром, во время езды в маршрутке на работу, мне пришла в голову абсолютна та же "мысля", только, оформилась она в нечто более "многословное", типа так: "/$A((?!$Z).(?!$Z))*$B/", или так: "/$A(.(?!$Z)(?<!$Z))*$B/".
Ваш случай, безусловно, более "лаконичен", только я что-то не могу пока догнать - каким образом (?: ) ( noncapturing group ) позволяет избавиться от дублирования negative lookbehind и negative lookahead ?
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34940912
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qu-quВаш случай, безусловно, более "лаконичен", только я что-то не могу пока догнать - каким образом (?: ) ( noncapturing group ) позволяет избавиться от дублирования negative lookbehind и negative lookahead ?

Я просто понял, что легко можно переложить на стандартные regexp-ы то как я решаю эту задачку в своей машинке (которая скорее парсер). Просто стоп-выражение в квантификаторе. Если со следующего символа не начинается ZZZ, захватываем любой символ. Ваши проверки избыточны, внешний квантификатор тоже может быть любой.
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34940926
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qu-qu noncapturing group

в данном случае не более чем оптимизирующий наворот.
не в нем дело, это вполне может быть обычная скобка
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34941095
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan) qu-qu noncapturing group

в данном случае не более чем оптимизирующий наворот.
не в нем дело, это вполне может быть обычная скобка
Это я уже понял практически сразу же после того, как спросил, а потом - внимательнее посмотрел на выражение...
Gluk (Kazan)... Ваши проверки избыточны, внешний квантификатор тоже может быть любой.
Это тоже стало более-менее понятно (про избыточность), после того как я "поигрался" с различными сочетаниями negative lookbehind и negative lookahead ...
Однако ж, одна неясность все-таки осталась - почему на таком тесте:
"CCCAAADDDBBBAAAZZZDDDBBBAAADZZZDDBBBAAADDZZZDBBBAAADDDZZZBBBAAAZZZBBBZZZAAABBBFFF"...
Вот это "AAA((?!ZZZ) . )*BBB" (или "AAA( . (? < !ZZZ))*BBB") срабатывает:

AAADDDBBB
AAABBB
А это "AAA( . (?!ZZZ))*BBB" (или "AAA((? < !ZZZ) . )*BBB") нет:

AAADDDBBB
AAAZZZDDDBBB (или AAADDDZZZBBB)
AAAZZZBBB
AAABBB
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34941126
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qu-quВот это "AAA((?!ZZZ) . )*BBB" (или "AAA( . (? < !ZZZ))*BBB") срабатывает:

AAADDDBBB
AAABBB
А это "AAA( . (?!ZZZ))*BBB" (или "AAA((? < !ZZZ) . )*BBB") нет:

AAADDDBBB
AAAZZZDDDBBB (или AAADDDZZZBBB)
AAAZZZBBB
AAABBB

Вероятно потому, что сначала надо проверять, а уж затем захватывать ?
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34941257
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)... Если со следующего символа не начинается ZZZ, захватываем любой символ...
Предыдущий вопрос можно переформулировать так: какая "концептуальная" разница между "если со следующего символа не начинается ZZZ" и "если со следующим символом не заканчивается ZZZ"?
Gluk (Kazan)... Вероятно потому, что сначала надо проверять, а уж затем захватывать...
Ну дык, вот же: "AAA((? < !ZZZ) . )*BBB" - сначала (вроде бы) "проверяет", однако ж - не работает...
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34941278
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вдогонку...
Gluk (Kazan)... Вероятно потому, что сначала надо проверять, а уж затем захватывать...
А вот это: "AAA(( . ? < !ZZZ))*BBB" - сначала (вроде бы) "захватывает", однако ж - работает...
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34941292
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qu-qu... "AAA( . (? < !ZZZ))*BBB" ...
ну это, скобкой ошибся, как водится...
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34941322
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)(про C# врать не буду, но в Java вереницы бакслешей (в частности) просто убивают).В С# два типа строк: с-образные и бейсикообразные, во втором символы экранировать не надо. Регекспы не интегрированы ради простоты синтаксиса языка. Я имел в виду не возможности регекспов, а специфические особенность перла как языка
Gluk (Kazan)заказчик хотел видеть реализацию на солярке.в такой постановке про .нет можно было даже не думать.
Gluk (Kazan)Perl - бесплатен .я рад за него :)
Gluk (Kazan)Безусловно и для любого использованиято есть его код в PD? Если по-умному, тебе следовало указать лицензию, а не пытаться изложить её упрощённо.
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34941376
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoЕсли по-умному, тебе следовало указать лицензию, а не пытаться изложить её упрощённо.

изволь

По раздуванию щек, я так понимаю, что в защиту C# кроме двух типов строк и невозможности работы на солярке сказать нечего ???
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34941453
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan) изволь вот видишь, его можно использовать не по-любому, а только так, как описано в лицензии, а по-другому его использовать нельзя. И эти ограничения чётко расписаны.

Gluk (Kazan)По раздуванию щек, я так понимаю, что в защиту C# кроме двух типов строк и невозможности работы на солярке сказать нечего ???не представляю, что ты хочешь услышать. Если есть какой-то конкретный вопрос, спрашивай.
...
Рейтинг: 0 / 0
Кто на регулярных выражениях собаку съел? Подскажите...
    #34941459
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну если поддержать разговор… То регекспы в .нет тоже интегрированы: попробуй их оттуда выдрать
...
Рейтинг: 0 / 0
25 сообщений из 85, страница 3 из 4
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Кто на регулярных выражениях собаку съел? Подскажите...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]