Qui su SO le persone a volte dicono qualcosa come "non puoi analizzare X con espressioni regolari, perché X non è un linguaggio normale". Tuttavia, dalla mia comprensione, i moderni motori di espressioni regolari possono corrispondere a più di semplici lingue in Chomsky's sense. Le mie domande:Che tipo di linguaggi formali possono analizzare i motori regex moderni?
dato un motore di espressioni regolari che supporta
- backreference
- affermazioni Lookaround di larghezza illimitata
- ricorsione, come
(?R)
che tipo di lingue può esso analizzare? Può analizzare qualsiasi linguaggio privo di contesto e, in caso contrario, quale sarebbe il controesempio?
(Per essere precisi, con "parse" intendo "creare una singola espressione regolare che accetta tutte le stringhe generate dalla grammatica X e rifiuta tutte le altre stringhe").
Aggiungi: Sono particolarmente interessato a vedere un esempio di un linguaggio privo di contesto che i moduli regex moderni (Perl, Net, modulo regex di Python) non sarebbero in grado di analizzare.
La cosa con espressioni regolari è che può essere molto preciso o molto lento, ma è difficile farlo funzionare "giusto". Questo è il caso con street HTML, dove non ci sono tag aperti o chiusi non validi. – nhahtdh
Questo potrebbe essere migliore di [cs.SE]. A proposito, le rezex non sono grammatiche; formalismo diverso. – Raphael
Un recente articolo sull'argomento è: [Il vero potere delle espressioni regolari] (http://nikic.github.com/2012/06/15/The-true-power-of-regular-expressions.html) - È una lettura interessante, e penso che risponda alle tue domande con buoni esempi. – Kobi