Я пишу инструмент, который поможет учащимся изучать регулярные выражения. Я, вероятно, буду писать это на Java.
Идея такова: учащийся вводит регулярное выражение, а инструмент показывает, какие части текста будут сопоставлены регулярному выражению. Достаточно просто.
Но я хочу поддержать несколько различных "разновидностей" регулярных выражений, таких как:
- Основные регулярные выражения (думаю: grep)
- Расширенные регулярные выражения (думаю: egrep)
- Подмножество регулярных выражений Perl, включая классы символов \ w, \ s и т. Д.
- Регулярные выражения в стиле Sed
В Java есть класс java.util.Regex, но он поддерживает только регулярные выражения в стиле Perl, которые являются расширенным набором базовых и расширенных RE. Я думаю, что мне нужен способ взять любое заданное регулярное выражение и избежать метасимволов, которые не являются частью данного аромата. Затем я могу передать его объекту Regex, и он будет вести себя так, как если бы он был написан для выбранного интерпретатора RE.
Например, с учетом следующего регулярного выражения:
^\w+[0-9]{5}-(\d{4})?$
Как основное регулярное выражение, оно будет интерпретировано как:
^\\w\+[0-9]\{5\}-\(\\d\{4\}\)\?$
В качестве расширенного регулярного выражения это будет:
^\\w+[0-9]{5}-(\\d{4})?$
И как регулярное выражение в стиле Perl, оно будет таким же, как и исходное выражение.
Есть ли "регулярное выражение для регулярных выражений", которое я мог бы запустить через поиск и замену регулярных выражений, чтобы заключить немета-символы? Что еще я мог сделать? Могу ли я использовать альтернативные классы Java?