Che tipo di supporto è lì per PCRE (Perl Compatible Regular Expressions) in comune con le lingue?

StackOverflow https://stackoverflow.com/questions/1448164

  •  11-09-2019
  •  | 
  •  

Domanda

Mi interessa la potenza di PCRE (Perl Compatible Regular Expressions) e chiedo se possano diventare de facto un approccio in tutte le principali lingue (sono interessato in Java).Io sono disposto a utilizzare una libreria, se necessario.

Anche io non riuscivo a trovare un buon page in MODO da descrivere i pro e i contro di PCRE quindi, se questa non esiste, potrebbe essere utile includere nelle risposte

MODIFICA Io sono interessato al potere al di là di Java 1.6 regex, in particolare di nome acquisire gruppi

È stato utile?

Soluzione

Sembra che più mainstream lingue effettivamente usano la loro attuazione "Perl-come" espressioni regolari di utilizzare effettivamente libpcre.Lingue che rientrano in questa classe sono (almeno) di Java, JavaScript e Python.

Java java.util.regex libreria usa una sintassi molto pesantemente basato su Perl (ca.versione 5.8) espressioni regolari, comprese le norme per la fuga, l' \p e \P Classi Unicode, non avido e "possessivo", quantificatori, riferimenti, \Q..\E citando, e diversi (?...) costrutti tra cui camere non-gruppi di cattura, di larghezza zero lookahead/dietro, e non backtracking gruppi.Infatti Java espressioni regolari sembrano avere molto in comune con espressioni regolari Perl meno libpcre fa.:)

Il linguaggio JavaScript, inoltre, utilizza espressioni regolari che sono derivati da Perl;Classi Unicode, lookbehind, possessivo, quantificatori, e non backtracking gruppi sono assenti, ma il resto di quello che ho indicato per Java è presente anche in JS.

Python: la sintassi delle espressioni regolari è anche sulla base di Perl 5, non avido quantificatori, la maggior parte delle (?...) costrutti tra cui camere non-gruppi di cattura, guarda-avanti/dietro e condizionale dei modelli, nonché di nome acquisire gruppi (ma con una sintassi diversa rispetto Perl o PCRE).Non backtracking gruppi e 'possessivo' quantificatori sono (per quanto posso vedere) assenti, come sono \p e \P Carattere Unicode classi, anche se lo standard \d, \s, e \w le classi sono compatibili con Unicode, se richiesto.

Altri suggerimenti

  

I ... chiedo se essi [PCRE] sono destinate a diventare un approccio di fatto in tutte le principali lingue (Sono interessato a Java).

Ciò richiede la speculazione, ma credo che la risposta è no ... nel caso di Java. Baso questa sul fatto che non riesco a trovare qualsiasi implementazione pena PCRE per Java. (A parte java.util.regex naturalmente.)

Se ci fosse un reale bisogno / richiesta di PCRE in Java, mi sarei aspettato che ci sia più librerie là fuori.

Prova a fare una scissione fuori di questo match:

(?:
  (?:'[\S\s]*?(?<!\\)') # Consume characters inside of a quoted string
  |(?:\/\*[\S\s]*?\*\/) # Consume multi-line comments
  |(?m:\/{2}[^\n]*$\n)  # Consume single-line comments
)(*SKIP)(*F)            # Fail match if any of the previous matches were found
|(?<=;)                 # Capture position right after semicolon

Assicurarsi di utilizzare il modificatore (s) 'x' e 'g' (se necessario).

Esempio

Questo suona un po 'come un "è x l'Unico Modo !?" tipo di domanda. PCRE ha molti difetti, il più evidente dei quali è essa la complessità e l'utilità discutibile. Raramente esiste un vero modo Uno per nulla, e nel regno di biblioteche regexp, PCRE certamente non è vero.

Perl espressioni regolari sono spazzatura assoluta a mio parere. Una volta che si ottiene molto al di là della funzione-set offerto da POSIX estesa espressioni regolari (ERE), si può anche usare qualcosa come un'implementazione PEG. L'unica ragione per PCRE è usato così ampiamente usato è perché è facile per le persone a risolvere un problema, semplicemente cadere in una libreria.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top