Существует ли инструмент там, который взял бы в regex аргументе и выложил бы допустимую комбинацию? Это должно сделать строку, которая соответствует regex.
Например:
clear
clear
ls (-[al]{2}|-a -l|-l -a)
ls -al
,ls -a -l
Выберите любой из методов из этого вопроса о переполнении стека, и используйте Python для его выполнения. Например:
$ python -c 'import rstr; print(rstr.xeger("ls (-[al]{2}|-a -l|-l -a)"))'
ls -a -l
Вам может понадобиться установить
модуль rstr.
Я не знаю ни одного инструмента, который делает то, что вы хотите из коробки - на самом деле, я был бы удивлен, если бы был - что он должен делать с выражениями, которые содержат подстановочные знаки (например, ). *
- например - Вы бы ожидали, что он выведет все возможные символы?)
Вероятно, самым близким было бы какое-нибудь регулярное выражение deparser, которое сгенерировало бы для Вас дерево разбора, которое затем Вам понадобилось бы переходить от корня к листу (при необходимости делая резервную копию, если Вы хотите достичь всех возможных узлов листа). Что-то вроде модуля perl YAPE::Regex, например - на самом деле, Вы могли бы основывать Ваше решение на расширении YAPE::Regex::explain:
$ printf '(-[al]{2}|-a -l|-l -a)' |
perl -MYAPE::Regex::Explain -ne 'print YAPE::Regex::Explain->new($_)->explain'
The regular expression:
(?-imsx:(-[al]{2}|-a -l|-l -a))
matches as follows:
NODE EXPLANATION
----------------------------------------------------------------------
(?-imsx: group, but do not capture (case-sensitive)
(with ^ and $ matching normally) (with . not
matching \n) (matching whitespace and #
normally):
----------------------------------------------------------------------
( group and capture to \1:
----------------------------------------------------------------------
- '-'
----------------------------------------------------------------------
[al]{2} any character of: 'a', 'l' (2 times)
----------------------------------------------------------------------
| OR
----------------------------------------------------------------------
-a -l '-a -l'
----------------------------------------------------------------------
| OR
----------------------------------------------------------------------
-l -a '-l -a'
----------------------------------------------------------------------
) end of \1
----------------------------------------------------------------------
) end of grouping
----------------------------------------------------------------------
(Я не знаю, почему оно обёртывает выражение в дополнительную (?:...)
не захватывающую группу).
К сожалению, модуль, кажется, недоступен из репозиториев Ubuntu, но вы должны иметь возможность установить его через CPAN.