Форум программистов, компьютерный форум, киберфорум
Perl
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
 Аватар для volodin661
6565 / 2211 / 344
Регистрация: 10.12.2013
Сообщений: 7,615

Самодокументирующийся REGEX

09.10.2022, 15:24. Показов 995. Ответов 3
Метки нет (Все метки)

Лучший ответ Сообщение было отмечено Catstail как решение

Решение

Студворк — интернет-сервис помощи студентам
Предположим, есть длинный развесистый regex;

Но для примера возьмём попроще, неразвесистый;

надо поймать: СЛОВО ~ ДВА ПРОБЕЛА ~ ЦИФРЫ ~ ТИРЕ ~ ЦИФРЫ КИЛЬКА 12345-698760

приступаем:

Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/env perl -n
use utf8;
use re '/x';
 
sub СЛОВО      { qr /\w+/   }
sub ДВАПРОБЕЛА { qr /\s{2}/ }
sub ЦИФРЫ      { qr /\d+/   }
sub МИНУС      { qr /-/     }
 
 
m{\G (??{ СЛОВО })     }g;
m{\G (??{ ДВАПРОБЕЛА })}g;
m{\G (??{ ЦИФРЫ })     }g;
m{\G (??{ МИНУС })     }g;
m{\G (??{ ЦИФРЫ })     }g
 
  ? print("OK\n")
  : print("NO\n")

Как видите, кроме того, что подшаблоны сведены в столбик,
они ещё разнесены по времени исполнения; и есть возможность передачи параметров в подпрограмму.

Не знаю, когда это пригодится, но показалось интересным.


ставьте лайки, пишите комментарии )


PS: есть и другой способ вызова подпрограмм внутри regex, основанный на строковой интерполяции,
но первый поинтересней.
Кликните здесь для просмотра всего текста

Perl
1
2
3
4
5
m/\G @{[ СЛОВО      ]}/g;
m/\G @{[ ДВАПРОБЕЛА ]}/g;
m/\G @{[ ЦИФРЫ      ]}/g
? print"OK\n"
: print"NO\n";
2
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.10.2022, 15:24
Ответы с готовыми решениями:

Regex в urxvt
Всем привет, нужна помощь. В терминале urxvt используется расширение selection-autotransform (при выделении текста, если он соответствет...

Не работают regex
Я новичок в Perl и немного запутался. Хочу написать программу, которая будет при помощи регулярок изменять текст. Всё работает, когда...

Самодокументирующийся код
В размышлениях о самодокументирующемся коде родился вот этот кусочек... И да сразу прошу прощения, могут быть допущены граматические ошибки...

3
50 / 35 / 9
Регистрация: 13.06.2019
Сообщений: 208
13.10.2022, 08:36
Познавательно ))

Особенно ценно напоминание про #!perl -n ))

но логика /\G(...)/g; /\G(...)/g вот так вот просто не заработала.

если последние один или более регэкспов применимы к началу строки, то итог оказывается истина (иногда! - почему?..).

С другой стороны, итог оказывается ложь, если имеются символы перед началом правильной последовательности.

Вот такое, вроде бы, работает /.*re1/g; /\Gre2/g.
Если просто первую \G убрать (а .* не добавить) - это все проблемы не решит.
Миниатюры
Самодокументирующийся REGEX  
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
37968 / 21001 / 4299
Регистрация: 12.02.2012
Сообщений: 34,556
Записей в блоге: 14
13.10.2022, 10:10
Очень одобряю! И у меня были подобные мысли.
0
321 / 46 / 11
Регистрация: 08.04.2022
Сообщений: 177
13.10.2022, 20:41
Красиво, но неудобно, хотя это дело вкуса.

При первом прочтении вашего поста я вспомнил свои эксперименты с модулем Pegex. Это классная штука для реализации существующих и новых ЯП. Я думал, что модуль использует эту же технику, но нет: недавно посмотрел в его внутренности - там веселые регекспы в стиле БНФ как элементы многоуровневых хешей.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.10.2022, 20:41
Помогаю со студенческими работами здесь

std::regex и boost::regex
Что-то я не пойму что реализация их различна ? #include <iostream> #include <string> //#include <regex> //using...

C++ Regex
В C# есть такой код string Text_One = @""; string Text_Two = "234073244385784375987"; Regex Test = new Regex(Text_One); ...

Regex \cX, \cx
Здравствуйте! Почему в этой эскейп-последовательности два варианта: \cX, \cx? Как это понять? Я сам домыслил так. Вместо X, x...

Regex
Хочу почитать что нибудь про регулярные выражения. Если кто знает хорошие статьи, киньте ссылочку. А то нашел книжку, там скан очень...

Regex \e
Доброго дня, Уважаемые! Помогите привести пример использования \e. Что записать в переменную "stri", чтобы понять, как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
dev-c++5.11 Продолжаю движение.
russiannick 08.06.2025
Казалось, день прошел впустую. Просмотрел кучу видео и только потом заметил заголовок - уроки си. Искусители сбивали новичка с пути с++. Так легко ошибиться когда вокруг столько яп содержащих в. . .
Квантовые алгоритмы и обработка строк в Q#
EggHead 07.06.2025
Квантовые вычисления перевернули наше представление о том, как работать с данными, а Q# стал одним из ключевых языков для разработки квантовых алгоритмов. В традиционых системах мы оперируем битами —. . .
NUnit и C#
UnmanagedCoder 07.06.2025
В . NET существует несколько фреймворков для тестирования: MSTest (встроенный в Visual Studio), xUnit. net (более новый фреймворк) и, собственно, NUnit. Каждый имеет свои преимущества, но NUnit. . .
с++ Что нового?
russiannick 06.06.2025
Продолжаю обзор dev-cpp5. 11. Посмотрев на проекты, предоставленные нам для обучения, становится видно, что они разные по содержащимся файлам где: . dev обязательно присутствует . cpp/ . c один из них. . .
WebAssembly в Kubernetes
Mr. Docker 06.06.2025
WebAssembly изначально разрабатывался как бинарный формат инструкций для виртуальной машины, обеспечивающий высокую производительность в браузерах. Но потенциал технологии оказался гораздо шире - она. . .
Как создать первый микросервис на C# с ASP.NET Core, step by step
stackOverflow 06.06.2025
Если говорить простыми словами, микросервисная архитектура — это подход к разработке, при котором приложение строится как набор небольших, слабо связанных сервисов, каждый из которых отвечает за. . .
Рисование коллайдеров Box2D v2 на Three.js с помощью порта @box2d/core
8Observer8 06.06.2025
Используется порт Box2D v2 под названием @box2d/ core - пакет NPM. Загрузил документацию Box2D v2 на Netlify: https:/ / box2d-v2-docs. netlify. app/ Документацию Box2D v2 можно скачать с официального. . .
Как создать стек в Python
AI_Generated 05.06.2025
Как архитектор с более чем десятилетним опытом работы с Python, я неоднократно убеждался, что знание низкоуровневых механизмов работы стеков дает конкурентное преимущество при решении сложных задач. . . .
Server-Sent Events (SSE) в Node.js
run.dev 05.06.2025
Потоковая передача данных с сервера прямо в браузер стала повседневной потребностью - от биржевых графиков и спортивных трансляций до чатов и умных дашбордов. Много лет разработчики полагались на. . .
Создаем RESTful API на Golang с Fiber
golander 04.06.2025
Я перепробовал десятки фреймворков для создания RESTful API за последние годы, и когда впервые столкнулся с Fiber, понял, что это совсем другой уровень. Нет, я не собираюсь рассказывать сказки о. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
OSZAR »