Когда вы начинаете изучать новый язык программирования, возможно, вы изучали следующие шаги: переменная, присваивание, строка, операторы ... Одна из основных тем, на которой вам нужно сосредоточиться, - это 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
по-прежнему кажется лучшим выбором в некоторых сложных случаях.