Глядя на некоторые из вопросов регулярного выражения, которые обычно задаются на SO, мне кажется, что существует ряд областей, где традиционный синтаксис regex не соответствует тем задачам, которые люди ищут в настоящее время. Например:Преемник регулярного выражения?
- Я хочу сопоставить число от 1 до 31, как это сделать?
Обычный ответ не используется для этого регулярного выражения, используйте обычные условные сравнения. Это нормально, если у вас есть только номер сам по себе, но не настолько велика, когда вы хотите совместить число как часть более длинной строки. Почему мы не можем написать что-то вроде \d{1~31}
и либо изменить регулярное выражение, чтобы выполнить какую-либо форму подсчета, либо заставить двигатель регулярного выражения перевести его в [1-9]|[12]\d|3[01]
?
- Как совместить четное/нечетное число вхождений определенной строки?
Это приводит к очень грязным регулярным выражениям, было бы здорово, чтобы иметь возможность просто сделать (mytext){Odd}
.
- Как обработать XML с регулярным выражением?
We all know, что это плохая идея, но это и подобные задачи было бы легче, если оператор [^ ]
не ограничивается только один символ. Было бы хорошо, чтобы быть в состоянии сделать <name>(.*)[^(</name>)]
- Как проверить электронную почту с регулярным выражением?
Очень часто делается и все же очень сложно сделать правильно с регулярным выражением. Это спасло бы всех, кто должен был изобрести колесо, если вместо этого можно использовать синтаксис, например {IsEmail}
.
Я уверен, что есть и другие, которые были бы полезны. Я не слишком много знаю о внутренностях регулярных выражений, чтобы знать, как легко это будет реализовано, или если это будет возможно. Реализация какой-либо формы подсчета (для решения первых двух проблем) может означать, что это не технически «регулярное выражение», но это было бы полезно.
Является синтаксисом 'regex 2.0', желательно, технически возможным, и есть ли кто-нибудь, работающий над чем-то подобным?
Регулярные выражения являются ** наименьший общий знаменатель ** текста соответствия, и они хороши в этом. Что-нибудь более конкретное будет лучше обрабатываться DSL, чем инструмент общего назначения, который является Regexes. Да, было бы неплохо добавить кухонную раковину в Regexes, но они уже достаточно сложны. Соблазн голосовать за * субъективную и аргументативную *. – deceze
Это называется лексером и парсером. В сети множество генераторов. Они были вокруг, вероятно, до тех пор, как Regex. – leppie
большой вопрос, miket2e. о «да, точно, что с этим связано?» вопросов. к сожалению, у меня нет ответа, но мне интересно узнать ваши результаты. – kostja