regex - vuoto - regular expression




Quali sono le buone espressioni regolari? (6)

Ho lavorato per 5 anni principalmente in applicazioni desktop java per accedere ai database Oracle e non ho mai usato espressioni regolari. Ora inserisco Stack Overflow e vedo molte domande su di loro; Mi sento come se mi fossi perso qualcosa.

Per cosa usi le espressioni regolari?

PS scusa per il mio pessimo inglese


Come forse saprai, Oracle ora ha espressioni regolari: http://www.oracle.com/technology/oramag/webcolumns/2003/techarticles/rischert_regexp_pt1.html . Ho usato la nuova funzionalità in alcune query, ma non è stata così utile come in altri contesti. La ragione, credo, è che le espressioni regolari sono più adatte per trovare dati strutturati nascosti all'interno di dati non strutturati.

Ad esempio, potrei usare un'espressione regolare per trovare i messaggi Oracle che sono inseriti nel file di registro. Non è possibile sapere dove sono i messaggi - solo come sono. Quindi una regex è la migliore soluzione a questo problema. Quando lavori con un database relazionale, i dati sono solitamente pre-strutturati, quindi una regex non splende in quel contesto.


Considera un esempio in Ruby:

puts "Matched!" unless /\d{3}-\d{4}/.match("555-1234").nil?
puts "Didn't match!" if /\d{3}-\d{4}/.match("Not phone number").nil?

"/ \ D {3} - \ d {4} /" è l'espressione regolare e, come puoi vedere, è un modo MOLTO conciso per trovare una corrispondenza in una stringa.

Inoltre, utilizzando i gruppi è possibile estrarre informazioni, in quanto tali:

match = /([^@]*)@(.*)/.match("[email protected]")
name = match[1]
domain = match[2]

Qui, le parentesi nell'espressione regolare contrassegnano un gruppo di acquisizione, quindi puoi vedere esattamente COSA i dati corrispondono, quindi puoi eseguire ulteriori elaborazioni.

Questa è solo la punta dell'iceberg ... ci sono molte cose diverse che puoi fare con un'espressione regolare che rende l'elaborazione del testo DAVVERO facile.



Se vuoi conoscere le espressioni regolari, ti consiglio di controllare le espressioni regolari . Va dai concetti di base, fino a parlare di come funzionano i diversi motori sottostanti. Gli ultimi 4 capitoli danno anche un capitolo dedicato a ciascuno di PHP, .Net, Perl e Java. Ho imparato molto da esso e lo uso ancora come riferimento.


La migliore espressione regolare di sempre :

/^1?$|^(11+?)\1+$/

Verifica se un numero è primo. E funziona !!

NB: per farlo funzionare è necessario un po 'di set-up; il numero che vogliamo testare deve essere prima convertito in una stringa di " 1 ", quindi possiamo applicare l'espressione per verificare se la stringa non contiene un numero primo di " 1 ":

def is_prime(n)
  str = "1" * n
  return str !~ /^1?$|^(11+?)\1+$/ 
end

C'è una spiegazione dettagliata e molto accessibile sul blog di Avinash Meetoo .


Convalida delle password complesse :

Questo convaliderà una password con una lunghezza da 5 a 10 caratteri alfanumerici, con almeno un maiuscolo, uno minuscolo e una cifra:

^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9]{5,10}$






regex