Эквивалентность регулярных выражений

Это (теперь, по крайней мере) документированная функция. На странице man :

-i, --inventory, --inventory-файл указывает путь хоста инвентаризации или список узлов, разделенных запятыми. --inventory-файл устарел

blockquote>

(выделено мной)

Что еще не в руководстве, так это то, что «список узлов, разделенных запятыми» означает, что вам нужно добавить запятая, даже если «список» - это отдельный элемент, чтобы различать «цель для одного хоста с именем hostname»:

$ ansible -i 'hostname,' ...

и «загрузить инвентарь из файла с именем hostname»:

$ ansible -i 'hostname,' ...

Если у кого-то есть время, возможно, вы можете отправить запрос на перенос, чтобы изменить текст справки , чтобы объяснить это (и добавить дефис в «разделенные запятой») , но, возможно, это только я ..)

15
задан amit 18 February 2009 в 08:35
поделиться

4 ответа

Для тестирования эквивалентности, можно вычислить минимальный DFAs для выражений и сравнить их.

10
ответ дан 1 December 2019 в 03:15
поделиться

Тестируемость равенства является одним из классических свойств регулярных выражений. (N.B. Это не содержит, если Вы действительно говорите о регулярных выражениях Perl или некотором другом технически нерегулярный суперъязык.)

Поворот Ваш REs к обобщенным конечным автоматам A и B, затем создайте новый автомат A-B, таким образом, что состояния принятия A имеют пустые переходы к начальным состояниям B, и что состояния принятия B инвертируются. Это дает Вам автомат, который принимает все те строки, принятые A, за исключением всех принятые B.

Делают то же для B-A и уменьшают обоих до чистого ФАСА. Если FA не имеет никаких состояний принятия, доступных от начального состояния затем, он принимает пустой язык. Если можно показать, что и A-B и B-A пусты, Вы показали что = B.

Edit Heh, я не могу полагать, что никто не заметил гигантской ошибки там - намеренная, конечно, :-p

автоматы A-B, как описано примет те строки, первая половина которых принята A и чья вторая половина не принята B. Создание требовало , A-B является немного более хитрым процессом. Я не могу думать о нем первое, что пришло на ум, но я действительно знаю, что это четко определено (и вероятно включает состояния создания к представлению продуктов принятия состояний в A и непринятии состояний в B).

10
ответ дан 1 December 2019 в 03:15
поделиться

Это действительно зависит от того, что Вы подразумеваете под регулярными выражениями. Поскольку другие плакаты, на которые указывают, уменьшая оба выражения до их минимального DFA, должны работать, но он только работает на чистые регулярные выражения.

Некоторые конструкции, используемые в реальном мире regex, освобождают (обратные ссылки в особенности) дают им питание выразить языки, которые не являются регулярными, таким образом, алгоритм DFA не будет работать на них. Например, regex: ([a-z]*) \1 соответствия двойное происшествие того же слова, разделенного пространством (a a и b b, но не b a, ни a b). Это не может быть распознано конечным автоматом вообще.

2
ответ дан 1 December 2019 в 03:15
поделиться

Эти два потока Perlmonks обсуждают этот вопрос (а именно, считайте ответы blokhead):

1
ответ дан 1 December 2019 в 03:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: