/ / Porównywanie dwóch wyrażeń regularnych pod kątem ścisłości? - ruby, regex, perl

Porównywanie dwóch wyrażeń regularnych dla ścisłości? - ruby, regex, perl

Ogólnie rzecz biorąc, istnieje szybki sposób na porównanie dwóchwyrażenia regularne i określ, który z nich jest bardziej rygorystyczny? To znaczy, z dwoma wyrażeniami regularnymi A i B, A jest surowsze niż B, jeśli każdy ciąg pasujący do A również pasuje do B.

Odpowiedzi:

5 dla odpowiedzi № 1

Chociaż istnieją algorytmy, które pozwalają robić te rzeczy w teorii, zastosowanie ich do Ruby będzie trudne z kilku powodów:

  1. Ruby nie udostępnia tych funkcji jako wbudowanych, ponieważ celem wyrażeń regularnych Ruby jest dopasowanie tekstu, a nie wykonywanie teoretycznych manipulacji automatami skończonymi.
  2. Ruby nie ujawnia elementów wewnętrznych wyrażeń regularnych, aby można było uruchamiać własne algorytmy. (Chociaż można użyć inspect aby uzyskać oryginalną formę wyrażenia regularnego, należy go przeanalizować samodzielnie, aby przeprowadzić analizę wyrażenia regularnego).
  3. Wyrażenia regularne Ruby nie są prawdziwymi wyrażeniami regularnymiwyrażenia. Dzięki referencjom wstecznym, stosowanym w połączeniu z przechwytywaniem grup, mogą rozpoznać nadzbiór zwykłych języków (chociaż jest to tylko podzbiór języków wolnych od kontekstu), więc teoria nie pasowałaby idealnie do potęgi języka Ruby regularnego wyrażenia.