2016-03-07 21 views
5

Non riesco a trovare un riferimento ufficiale per le regole di precedenza per Perl regular expressions. Quello che posso trovare è solo Know the precedence of regular expression operators. Tuttavia, non è un riferimento ufficiale dato da perldoc.Quali sono le regole di precedenza per le espressioni regolari Perl?

+0

perlre contiene una sezione * Versione 8 espressioni regolari * che fornisce una descrizione verbale del modello regex meccanismi corrispondenti. – laune

+0

@laune, ho appena sfogliato _Version 8 Regular Expressions_. Ma non riesco a trovare nulla che sia rilevante per la precedenza. Potrebbe per favore indicare come è rilevante la precedenza? –

+2

Penso che questo testo chiarisca il problema, ma potresti dover leggere (un po ') tra le righe. - In ogni caso, non c'è mai stato un dubbio sulla precedenza di parentesi, quantificatori, giustapposizione e alternative all'interno di uno qualsiasi dei sistemi regex di utilità (primi) * nix, awk, Perl4, Perl5, Java, XML Schema e molti altri. - Cosa ti disturba?? – laune

risposta

4

Le espressioni regolari hanno solo due operatori binari, uno dei quali è implicito anziché rappresentato da un simbolo. Le espressioni regolari hanno anche un numero di operatori unari, ma la loro precedenza è discutibile a causa delle restrizioni sui loro operandi. Ciò rende davvero strano parlare di precedenza.

E 'più semplice trasmettere le informazioni che cercate utilizzando le seguenti istruzioni:

  • Quantificatori modificare un singolo atomo.
  • I modificatori di quantificatori modificano un singolo quantificatore.
  • L'alternanza è illimitata tranne per i parenti in cui risiedono.

Le informazioni di cui sopra vengono trasportate in un modo o nell'altro in perlretut.


Detto questo, è possibile creare una tabella di precedenza. Poiché le dichiarazioni di cui sopra trasmettono tutte le informazioni necessarie, è possibile creare da esse la tabella delle precedenze. È il seguente:

  1. atomi (es a, \n, \^, ., ^, \w, [...], \1, (...))
  2. Postfix unario operatori (quantificatori e modificatori quantificatori)
  3. implicito "seguita da "operatore tra atomi (possibilmente quantificati)
  4. Alternanza

Corrisponde al grafico nella pagina a cui è stato collegato.


Per divertimento, la seguente sarebbe la BNF:

pattern    ::= <alternation> 

alternation   ::= <sequence> <alternation2> 
alternation2   ::= "|" <alternation> | "" 

sequence    ::= <quantified_atom> <sequence> | "" 

quantified_atom  ::= <atom> <quantified_atom2> 
quantified_atom2  ::= <modified_quantifier> | "" 
modified_quantifier ::= <quantifier> <modified_quantifier2> 
modified_quantifier2 ::= <quantifier_modifier> | "" 
+0

Non avevi bisogno, era già bello :) – Aaron

Problemi correlati