Глядя на некоторые вопросы регулярного выражения, которые обычно задают SO, мне кажется, что существует ряд областей, где традиционный синтаксис regex не соответствует тем задачам, которые люди ищут в настоящее время. Например:
- Я хочу сопоставить число от 1 до 31, как это сделать?
Обычный ответ: не используйте для этого регулярное выражение, используйте обычные условные сравнения. Это хорошо, если у вас есть только номер сам по себе, но не настолько велика, когда вы хотите совместить число как часть более длинной строки. Почему мы не можем написать что-то вроде \d{1~31}
и либо модифицировать регулярное выражение, чтобы выполнить какую-либо форму подсчета, либо заставить механизм регулярного выражения перевести его в [1-9]|[12]\d|3[01]
?
- Как совместить четное/нечетное число вхождений определенной строки?
Это приводит к очень беспорядочному регулярному выражению, было бы здорово иметь возможность делать (mytext){Odd}
.
- Как обработать XML с помощью регулярного выражения?
Мы все знаем, что плохая идея, но эта и подобные задачи были бы проще, если бы оператор [^ ]
не ограничивался только одним символом. Было бы неплохо иметь возможность <name>(.*)[^(</name>)]
- Как проверить письмо с регулярным выражением?
Очень часто делается и все же очень сложно делать правильно с регулярным выражением. Это спасло бы всех, кто должен был изобрести колесо, если вместо него мог бы использоваться синтаксис типа {IsEmail}
.
Я уверен, что есть и другие, которые тоже будут полезны. Я не слишком много знаю о внутренностях регулярных выражений, чтобы знать, как легко это будет реализовано, или если это будет возможно. Реализация какой-либо формы подсчета (для решения первых двух проблем) может означать, что это не технически "регулярное выражение", но это было бы полезно.
Является ли синтаксис 'regex 2.0' желательным, технически возможным, и есть ли кто-нибудь, кто работает над чем-то подобным?