Когда вы начинаете изучать новый язык программирования, возможно, вы изучали следующие шаги: переменная, присваивание, строка, операторы ... Одна из основных тем, на которой вам нужно сосредоточиться, - это string operations. Пример Fox: получить имя из полного имени, найти и подвергнуть цензуре все мобильные номера в сообщении,…

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

int checkMatchStubPattern(char* string) {
    for(int i = 0; i < strlen(string); i++) {
        // logic for checking string pattern
        ...
    }
    return ...
}

Не неправильный путь, но требует много времени. Вы должны изменить логику проверки в каждом случае. Больше кода, больше ошибок и, конечно, сложно поддерживать. К счастью, Regular Expression - Regex приходите как герой для решения таких проблем: поиск, проверка ввода ... В качестве подтверждения использования Regex каждый язык программирования поддерживает Regex для строковых операций.

Регулярное выражение - это последовательность символов, определяющая шаблон поиска. Затем этот шаблон используется алгоритмами поиска строк для операций «найти» или «найти и заменить» над строками или для проверки ввода. (Источник: Википедия)

Regex - эффективный инструмент для решения этой проблемы; но за это приходится платить. Его действительно сложно читать и понимать (но нетрудно выучить). Сначала попробуйте прочитать приведенный ниже пример.

Из-за сложного синтаксиса его очень трудно читать и понимать Regex. Кроме того, похоже, вы не слишком часто работаете с Regex. ROI (возврат инвестиций) слишком низкий; почти обычные Regex, которые вам нужно использовать, можно найти в Интернете (пароль, URL, IP-адрес и т. д.). Готовы ли вы потратить несколько недель на изучение того, что вы используете только 4 или 5 раз в год? Или просто бегло просмотреть некоторые сайты и получить результат примерно через 5 минут? Такой образ мышления заставляет разработчиков искать Regex в Google и вносить изменения в соответствии со своими потребностями. Иногда процесс повторения поиска - изменения…

Regex решить string operation проблему; а как насчет проблемы Regex? К счастью, это можно решить с помощью Verbal Expressions. Попробуйте взглянуть на этот пример.

VerEx()
.startOfLine()
.then('http')
.maybe('s')
.then('://')
.anythingBut(' ')
.endOfLine();

Надеюсь, вы не разочаруетесь, прочитав этот пример. Verbal Expressions выше определяется в соответствии с этим правилом:

  • URL-адрес должен начинаться с «http» или «https».
  • В этом случае URL-адрес должен содержать «: //».
  • URL-адрес может иметь что угодно после «: //», если только это не пробел.

Сгенерированный Regex из приведенного выше кода: /^(?:http)(?:s)?(?:\:\/\/)(?:[^ ]*)$/. Немного разнится, но функционал тот же. Вы можете найти реализацию Verbal Expressions на нескольких языках здесь.

VerbalExpressions решают самую большую проблему Regex. Это удобочитаемые и простые для понимания регулярные выражения. На мой взгляд, переход от Regex к VerbalExpressions так же хорош, как и переход от SQL к ORM.

В любом случае, у VerbalExpressions есть недостатки. Вам нужно установить новую библиотеку в свой проект, иногда это бывает довольно болезненно (например, вы клиент, менеджер ... не думаете, что это необходимо). В этом случае вы можете перейти в VerbalRegex; напишите код, и он сгенерирует для вас Regex.

Попробуйте этот инструмент, зайдя на verbalregex.com.

Заключение

VerbalExpressions не является заменой Regex; но простой способ написать читабельный Regex. Это может облегчить Regex боль и снова сделать написание выражений интересным. Но имейте в виду, что Regex по-прежнему кажется лучшим выбором в некоторых сложных случаях.