• Регулярные выражения + логическое программирование. Что в результате?

      Здравствуйте, уважаемые читатели.

      Регулярные выражения — хорошо известная вещь, которая используется в разнообразных проектах, чаще всего, для не очень сложных случаев разбора структурированных текстов. Занимаясь, на первый взгляд, такой несколько иной задачей, как обратный синтез моделей программ (когда есть код программы, порожденный автоматически некоторой системой по некоторой блочной модели решаемой задачи, и необходимо по этому коду воссоздать исходную модель), а также синтезом моделей программ по текстовому описанию задачи, я столкнулся с проблемой анализа текстов, а точнее — идентификации фрагментов текста некоторым настраиваемым шаблонам. Хотелось получить достаточно простое и гибкое (настраиваемое) решение. Регулярные выражения, с ходу, такими не казались, поскольку даже в такой простой задаче, как проверка слова по словарю, требовала, к сожалению, тщательного перечисления всех вариантов в этом выражении. Да и дерево синтаксического разбора они не строили. Однако, их явно можно было улучшить. Об этом и пойдет речь.
      Читать дальше →
    • Экспорт дерева тестов из JMeter в текст

      Привет, Хабр!


      Работаю на большом интеграционном проекте (IBM MQ, WebSphere, Oracle) и оплетаю наш кровавый энтерпрайз паутиной функциональных тестов в JMeter, который крутится на тестовом стенде и пробуждается по зову Jenkins после деплоя нового билда. По мере увеличения количества тестов столкнулся с проблемой поддержания тестовой документации в актуальном виде.

      Читать дальше →
    • Теория вычислений. Введение в конечные автоматы

      Спойлер
      Cкажу cразу, что не буду объяснять слишком формально.

      Конечные автоматы (finite-state machine)


      Это до предела упрощенная модель компьютера имеющая конечное число состояний, которая жертвует всеми особенностями компьютеров такие как ОЗУ, постоянная память, устройства ввода-вывода и процессорными ядрами в обмен на простоту понимания, удобство рас­суждения и легкость программной или аппаратной реализации.

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

      У конечных автоматов имеется таблица переходов, текущее состояние автомата, стартовое состояние и заключительное состояние.

      Таблица переходов — В ней хранятся переходы для текущего состояния и входного символа. Простейшая реализация может быть как двумерный массив.

      Пример 1
      • По горизонтали вверху находятся возможные входные символы.
      • По вертикали слева находятся текущие возможные состояния.

      image

      Здесь видно, что из состояния 0 в состояние 1 можно попасть только, если у нас будет входной символ 'a', из состояния 1 в состояние 2, если символ 'b'.


      Текущее состояние — множество состояний в котором автомат может находиться в данный момент времени.

      Стартовое состояние — состояние откуда КА начинает свою работу.

      Заключительное состояние — множество состояний в которых автомат принимает определенную цепочку символов, в ином случае отвергает.
      Читать дальше →
      • +19
      • 8,3k
      • 8
    • Решение больших проблем небольшим семантическим анализатором

        image


        Сдача проекта в опытную эксплуатацию. Комиссия наблюдает, как система распознаёт информацию из сообщений, поступающих в в режиме реального времени. Приходит первое сообщение: “Тихо.


        Комиссия. Что значит “Тихо”? Они там в филиале пьяные что ли?
        Система. "Тихо" = Сила ветра в пределах нормы.
        Комиссия. Так это они о погоде. Система сдана в опытную эксплуатацию!


        Все события в статье вымышлены. Любые совпадения с реальностью случайны.


        Мне довелось работать на проекте, в котором с помощью семантического анализа удалось решить одну из главных проблем управления крупным бизнесом — получение своевременной и актуальной информации о состоянии дел в филиалах компании.

        Читать дальше →
      • RegExp Unicode Property Escapes в JavaScript: штрихи к портрету

          RegExp Unicode Property Escapes перешли на 4-ю ступень и будут включены в ES2018.


          В V8 они доступны без флага начиная с v6.4, поэтому готовы к использованию во всех текущих каналах Google Chrome от стабильного до Canary.


          В Node.js они будут доступны без флага уже в v10 (выходит в апреле). В других версиях требуется флаг --harmony_regexp_property (Node.js v6–v9) или --harmony (Node.js v8–v9). Сейчас без флага их можно испробовать или в ночных сборках, или в ветке v8-canary.


          При этом нужно иметь в виду, что сборки Node.js, скомпилированные без поддержки ICU, будут лишены возможности использовать этот класс регулярных выражений (подробнее см. Internationalization Support). Например, это касается популярной сборки под Android от сообщества Termux.


          Подробнее о поддержке в других движках и средах см. в известной таблице (после перехода проскрольте чуть выше).


          Я не буду повторять описания этой долгожданной возможности, лишь сошлюсь на несколько статей известных специалистов:

          Читать дальше →
        • Регулярные выражения в Python от простого к сложному. Подробности, примеры, картинки, упражнения

          • Tutorial

          Регулярные выражения в Python от простого к сложному




          Решил я давеча моим школьникам дать задачек на регулярные выражения для изучения. А к задачкам нужна какая-нибудь теория. И стал я искать хорошие тексты на русском. Пяток сносных нашёл, но всё не то. Что-то смято, что-то упущено. У этих текстов был не только фатальный недостаток. Мало картинок, мало примеров. И почти нет разумных задач. Ну неужели поиск IP-адреса — это самая частая задача для регулярных выражений? Вот и я думаю, что нет.
          Про разницу (?:...) / (...) фиг найдёшь, а без этого знания в некоторых случаях можно только страдать.

          Плюс в питоне есть немало регулярных плюшек. Например, re.split может добавлять тот кусок текста, по которому был разрез, в список частей. А в re.sub можно вместо шаблона для замены передать функцию. Это — реальные вещи, которые прямо очень нужны, но никто про это не пишет.
          Так и родился этот достаточно многобуквенный материал с подробностями, тонкостями, картинками и задачами.

          Надеюсь, вам удастся из него извлечь что-нибудь новое и полезное, даже если вы уже в ладах с регулярками.
          Читать дальше →
        • Ой, у вас баннер убежал!

          Ну. И что?
          Реклама
        • Регулярные выражения: никакой магии

          • Перевод
          image

          Код этого поста, как и сам пост, выложен на github.

          До недавнего времени регулярные выражения казались мне какой-то магией. Я никак не мог понять, как можно определить, соответствует ли строка заданному регулярному выражению. А теперь я это понял! Ниже представлена реализация простого движка регулярных выражений менее чем в 200 строках кода.

          Часть 1: Парсинг


          Спецификация


          Реализация регулярных выражений полностью — довольно сложная задача; хуже того, она мало чему вас научит. Реализуемой нами версии достаточно для того, чтобы изучить тему, не скатываясь в рутину. Наш язык регулярных выражений будет поддерживать следующее:

          • . — соответствие любому символу
          • | — соответствие abc или cde
          • + — соответствие одному или более предыдущего паттерна
          • * — соответствие 0 или более предыдущего паттерна
          • ( и ) — для группировки

          Хотя набор опций невелик, с его помощью можно создать интересные regex-ы, например, m (t|n| ) | b позволяющий найти субтитры к Star Wars без субтитров к Star Trek, или (..)* для нахождения множества всех строк чётной длины.

          План атаки


          Мы будем анализировать регулярные выражения в три этапа:

          1. Парсинг (синтаксический анализ) регулярного выражения в синтаксическое дерево
          2. Преобразование синтаксического дерева в конечный автомат
          3. Анализ конечного автомата для нашей строки

          Для анализа регулярных выражений (подробнее об этом ниже) мы будем использовать конечный автомат под названием NFA. На высоком уровне NFA будет представлять наш regex. При получении входных данных мы будем перемещаться в NFA от состояния к состоянию. Если мы придём в точку, из которой невозможно совершить допустимого перехода, то регулярное выражение не соответствует строке.
          Читать дальше →
          • +27
          • 15,1k
          • 4
        • Как я написал приложение, которое за 15 минут делало то же самое, что и регулярное выражение за 5 дней

          • Перевод

          От переводчика


          Не так давно столкнулся с проблемой поиска набора слов в большом тексте. Разумеется главной проблемой стала производительность. Поиск готовых решений порождал больше вопросов, чем давал ответов. Часто я натыкался на примеры использования каких-то сторонних коробок или онлайн-сервисов. А мне в первую очередь нужно было простое и легкое решение, которое в дальнейшем дало бы мысли для реализации собственной утилиты.

          Несколько недель назад вышла замечательная англоязычная статься об open-source python-библиотеки FlashText. Эта библиотека предоставляла быстрое работающее решение задачи поиска и замены ключевых слов в тексте.

          Т.к. на русском материалов подобной тематики не так много, то я решил перевести эту статью на русский. Под катом вас ждет описание проблемы, разбор принципа работы библиотеки а так же примеры тестов производительности.
          Поехали
        • Регулярные выражения для самых маленьких

            Привет, Хабр.

            Под катом я расскажу основы работы с регулярными выражениями. На эту тему написано много теоретических статей. В этой статье я решил сделать упор на количество примеров. Мне кажется, что это лучший способ показать возможности этого инструмента.

            Некоторые из них для наглядности будут показаны на примере языков программирования PHP или JavaScript, но в целом они работают независимо от ЯП.

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

            В конце статьи я в двух словах расскажу, какие задачи нельзя решить регулярными выражениями и какие инструменты для этого стоит использовать.

            Поехали!


            Читать дальше →
          • Стажеры

              В последнее время на Хабре наметился мощный тренд, начало которому дал пост «необразованная молодежь» — обсуждаем молодых специалистов, как с позиции работодателя, то есть бизнеса, так и с позиции самих спецов, вчерашних или настоящих студентов. Посмотреть можно здесь и здесь.

              Мы бы хотели поделиться аналитикой по подбору персонала на стажерские позиции, проекты по разработке продуктов и сервисов ИБ. Мы постарались подойти к описанию процесса максимально безоценочно, не вдаваясь в сложные моральные дилеммы формата «отцы и дети». Все мы когда-то были стажерами, молодыми/неопытными и все рано или поздно сталкиваемся с тем, что как в балете говорят, «приходит опыт — уходит прыжок».

              В начале сентября было открыто 2 вакансии: стажер-исследователь и стажер-разработчик.


              Читать дальше →
            Самое читаемое