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?
risposta
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:
- atomi (es
a
,\n
,\^
,.
,^
,\w
,[...]
,\1
,(...)
) - Postfix unario operatori (quantificatori e modificatori quantificatori)
- implicito "seguita da "operatore tra atomi (possibilmente quantificati)
- 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> | ""
Non avevi bisogno, era già bello :) – Aaron
perlre contiene una sezione * Versione 8 espressioni regolari * che fornisce una descrizione verbale del modello regex meccanismi corrispondenti. – laune
@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? –
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