Рубрика «Регулярные выражения» - 10

Между регулярными выражениями в JavaScript и регулярными выражениями PCRE (употребляющимися в Perl и в PHP) есть ряд различий, главнейшим из которых, вероятно, является отсутствие lookbehind (ретроспективной проверки) в JavaScript.

Естественной задачею программистов, раздражённых этими различиями, является внедрение PCRE в JavaScript.

На движке Node к концу нынешнего января Брайан Уайт (Brian White) решил эту задачу, создав модуль node-pcre, служащий обёрткою вокруг движка PCRE.

Этому можно порадоваться, и порадуемся.

Однако node-pcre,Читать полностью »

ТЗ или о чем пойдет речь

Данный пост будет, как правило, интересен студентам, так как подобное задание было получено в качестве лабораторной работы по дисциплине «Лингвистические основы информатики».
Итак, давайте же рассмотрим техническое задание подробнее. Что нам требуется? А требуется нам создать анализатор, который будет разбивать заданный текст на языке Java по классам — ключевым словам, идентификаторам, операторам, пунктуаторам (сепараторам) и т.п., и выводить результат работы в таблицу. Таблица будет содержать следующие столбцы:

  • Токен
  • Спецификатор
  • Описание
  • Позиция
  • Длинна

Напомню, что токен — это последовательности символов в лексическом анализе в информатике, соответствующий лексеме.
Спецификатор описывает к какому классу относится токен. То есть, например, для токена «boolean» в таблице выведется «Keywords».
Ну описание, позицию и длину описывать, я думаю, не стоит.
Вроде бы задание понятно. Теперь разобьем его на подзадачи.
0) Изначально я бы посоветовал изучить спецификацию языка, для которого вы будете писать анализатор. Далее нам нужно:
1) Загрузить массив данных о наших ключевых словах, операторах и пунктуаторах, так как они уникальны.
2) Распарсить заданный текст на токены и определить их классы. (Распарсить — то же самое, что и разобрать, т.е. выбрать эти элементы из текста в переменные)
3) Занести данные о токенах в массив и отсортировать его.
4) Вывести данные в таблицу.
Читать полностью »

Я хочу предложить вам поломать голову вечерок-другой над интересными задачками, на регулярные выражения, которые Callum Macrae выкладывает на своем сайте на GitHub каждый Вторник.

Каждый вопрос представлен в виде набора тестов. Задача — написать такой регулярное выражение, чтобы все тесты стали зелеными.
Некоторые из задач сами по себе довольно простые, а самая интересная часть — в том, чтобы написать наиболее короткое возможное регулярное выражение.

Тесты используют JavaScript Regex движок вашего браузера, который обладает всеми основными возможностями PCRE.  Подробнее можно посмотреть тут (англ.) , в колонке ECMA в таблице.

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

Читать полностью »

Регулярные выражения (РВ) — это очень удобная форма записи так называемых регулярных или автоматных языков. Поэтому РВ используются в качестве входного языка во многих системах, обрабатывающие цепочки. Рассмотрим примеры таких систем:

  • Команда grep операционной системы Unix или аналогичные команды для поиска цепочек, которые можно встретить в Web-броузерах или системах форматирования текста. В таких системах РВ используются для описания шаблонов, которые пользователь ищет в файле. Различные поисковые системы преобразуют РВ либо в детерминированный конечный автомат (ДКА), либо недетерминированный конечный автомат (НКА) и применяют этот автомат к файлу, в котором производится поиск.
  • Генераторы лексических анализаторов. Лексические анализаторы являются компонентом компилятора, они разбивают исходную программу на логические единицы (лексемы), которые могут состоять из одного или нескольких символов и имеют определенный смысл. Генератор лексических анализаторов получает формальные описания лексем, являющиеся по существу РВ, и создает ДКА, который распознает, какая из лексем появляется на его входе.
  • РВ в языках программирования.

В данной статье мы сначала ознакомимся с конечными автоматами и их видами(ДКА и НКА), и далее рассмотрим пример построения минимального ДКА по регулярному выражению.
Читать полностью »

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

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

Задача банальная — заменить переводы строк на <br/>, за исключением случая, если перед этим шел html-тэг (для простоты только символ >). Отходя от темы — такой алгоритм замены нужен чтобы иметь и автоматическое добавление переводов строки внутри блоков текста в стиле хабра, и при этом не ломать обычную HTML верстку.Читать полностью »

Регулярные выражения — спасение от всех бед для одних и ночной кошмар для других разработчиков, а если говорить объективно, то это мощнейший инструмент, требующий, однако, большой осторожности при применении. Регулярные выражения (регексы, регекспы, регулярки) в языке Ruby основаны на синтаксисе Perl 5 и потому в основных чертах знакомы всем, кто использовал Perl, Python или PHP. Но Ruby тем и хорош, что каждый компонент языка реализован со своим собственным подходом, упрощающим использование данного инструмента и увеличивающим его мощность. В предлагаемой мной небольшой статье рассматриваются особенности регулярок в Ruby и их применение в различных операторах.
Читать полностью »

Нужно было мне намедни расширить Tokenizer для одного известного поисковика на джаве. Всяческие стандартные токенайзеры ну никак не хотели делать то, что нужно было, даже с включением разных токен фильтров типа WordDelimiter и ко. Кто в теме, знает какой с этим бывает геморрой, особенно если используем мультиязычные фильтры — токенайзер то один.

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

Так вот накидал такое вот в тикле, даволен как слон все работает как хотел:

% join [regexp -inline -all {[w][w-&]+|[d-][d-*.,/]+} 
    "US-Währung, C&A, VW-Bus. 1.2.3 -23.456,78 12,345.00 12/01/2012"] " | "
US-Währung | C&A | VW-Bus | 1.2.3 | -23.456,78 | 12,345.00 | 12/01/2012

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

Короче, регулярка в порядке — лезем в джаву. Читать полностью »

Введение

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

Более сложная цель

Рассмотрим задачу, с которой я столкнулся в процессе своей работы. Мне кажется этот пример в достаточной мере раскрывает суть текущей темы.
Читать полностью »

Весьма полезный рецепт, который облегчает общение с коммандной строкой описан здесь, однако попробовать его вживую не удалось, т.к. под мою систему (OpenIndiana) не существует компиляторя языка Go. Так возникла идея переписать указанную программу на более универсальный язык, который точно существует на любой платформе — Perl.

На получившемся примере кода хотел бы продемонстрировать, как при помощи пары строк с использованием регулярных выражений, можно выполнить быстрый и эффективный поиск.
Читать полностью »

Ключевые новшества — возможность обработки неструктурированной информации для BI (iKnow + DeepSee), DeepSee Visual Reporting — WYSIWYG-редактор для DeepSee/Zen отчетов в браузере.
Другие важные улучшения: поддержка Node.js, регулярные выражения в Caché ObjectScript, поддержка .NET eXTreme для максимально быстрого прямого доступа к глобалам, Java eXTreme через TCP, асинхронный rollback для ECP соединений.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js