Сделайте так, чтобы интерпретатор регулярных выражений в стиле Perl вел себя как базовый или расширенный интерпретатор регулярных выражений - PullRequest
1 голос
/ 23 октября 2008

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

Ответы [ 5 ]

1 голос
/ 13 мая 2010

Если ваша цель - система Unix / Linux, зачем просто выкладывать на определенный хост каждого регулярного выражения? то есть использовать grep для BRE, egrep для ERE, perl для PCRE и т. д.? Единственное, что нужно сделать вашему модулю - это пользовательский интерфейс. Большинство тестеров регулярных выражений, которые я видел (которые являются приличными), используют вариант этого подхода.

Если вы хотите еще одно предложение библиотеки, посмотрите на TRE для части BRE / ERE / POSIX / AWK. Он не поддерживает обратные ссылки, поэтому PCRE / Python / Ruby / JS / Java вышла ...

1 голос
/ 23 октября 2008

проверьте в этом посте «регулярное выражение для регулярных выражений»: Существует ли регулярное выражение для обнаружения правильного регулярного выражения?

Вы можете использовать это как основу для вашего модуля.

1 голос
/ 23 октября 2008

Я написал что-то похожее: Существует ли регулярное выражение для обнаружения правильного регулярного выражения?

Вы можете принять участие в этом выражении и отдельно сопоставить каждый токен:

[^?+*{}()[\]\\]                # literal characters
\\[A-Za-z]                     # Character classes
\\\d+                          # Back references
\\\W                           # Escaped characters
\[\^?(?:\\.|[^\\])+?\]         # Character classs
\((?:\?[:=!>]|\?<[=!])?        # Beginning of a group
\)                             # End of a group
(?:[?+*]|\{\d+(?:,\d*)?\})\??  # Repetition
\|                             # Alternation

Для каждого соответствия у вас может быть некоторый словарь соответствующих замен в целевом аромате.

1 голос
/ 23 октября 2008

Кроме того, вы можете использовать Джакарта ORO ?

Это поддерживает следующие регулярные выражения 'flavors':

  • регулярные выражения, совместимые с Perl5
  • AWK-подобные регулярные выражения
  • выражения глобуса
0 голосов
/ 23 октября 2008

Если вы хотите, чтобы ваши студенты изучали регулярные выражения, почему бы не использовать свободно доступный инструмент - regex Coach - http://www.weitz.de/regex-coach/ в сети, который довольно хорош для изучения и оценки регулярных выражений?

посмотрите на этот поток SO по аналогичной проблеме - https://stackoverflow.com/questions/89718/is-there-anything-like-regexbuddy-in-the-open-source-world

BR
~ A

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...