Domanda

Ho lavorato per 5 anni principalmente in java desktop applicazioni l'accesso a database Oracle e non ho mai usato espressioni regolari.Ora devo inserire Overflow dello Stack e vedo un sacco di domande su di loro;Mi sento come se avessi perso qualcosa.

Per che cosa si usa espressioni regolari?

P. S.mi dispiace per il mio cattivo inglese

È stato utile?

Soluzione

Si consideri 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?

Il "/\d{3}-\d{4}/" è l'espressione regolare, e come potete vedere è un modo conciso di trovare una corrispondenza in una stringa.

Inoltre, l'utilizzo di gruppi è possibile estrarre informazioni, come ad esempio:

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

Qui, la parentesi nell'espressione regolare contrassegno di un gruppo di cattura, in modo da poter vedere esattamente CIÒ che i dati che hai abbinato, così si può fare un'ulteriore elaborazione.

Questa è solo la punta dell'iceberg...ci sono tante cose che si possono fare in un'espressione regolare che rende l'elaborazione di un testo molto semplice.

Altri suggerimenti

Le Espressioni regolari (o Regex) sono utilizzati per corrispondenza in stringhe.È quindi possibile estrarre tutti gli indirizzi email da un pezzo di testo, perché segue un modello specifico.

In alcuni casi, le espressioni regolari sono chiusi in avanti-barre e dopo la seconda barra sono collocati opzioni come minuscole.Ecco una buona :)

/(bb|[^b]{2})/i

Parlato è in grado di leggere 2 o 2".

La prima parte sono (tra parentesi), sono ripartiti per il tubo | carattere il che equivale a una dichiarazione così (a|b) corrisponde a "a" o "b".La prima metà del sottofondo corrisponda a "bb".La seconda metà del nome non lo so, ma è la parentesi quadre, che corrisponde a nulla che è non "b", ecco perché non c'è un tetto simbolo thingie (termine tecnico) c'.Il ondulate parentesi corrispondono a un conteggio di cose prima di loro, in questo caso due personaggi che non sono "b".

Dopo la seconda / è un "io" che lo rende tra maiuscole e minuscole.L'uso di inizio e fine barre è un ambiente specifico, a volte sì e a volte no.

Due link che credo troverete a portata di mano per questo sono

  1. regular-expressions.info
  2. Wikipedia - espressione Regolare

Più cool espressione regolare mai:

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

Si verifica se un numero è primo.E funziona!!

N. B.:per farlo funzionare, un po ' di set-up è necessario;il numero che si desidera eseguire il test deve essere convertito in una stringa di “1”per prima cosa, quindi siamo in grado di applicare l'espressione per verificare se la stringa non non contengono un numero primo di “1”s:

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

C'è una dettagliata e molto accessibile spiegazione oltre a Avinash Meetoo blog.

Se si desidera conoscere le espressioni regolari, mi raccomando Mastering Espressioni Regolari.Va da concetti di base, fino a parlare di come i diversi motori di sotto.Gli ultimi 4 capitoli dà anche un capitolo dedicato a ciascuna di PHP, .Net, Perl e Java.Ho imparato molto da esso, e ancora lo uso come riferimento.

Se si sta appena iniziando con le espressioni regolari, raccomando vivamente di uno strumento come La Regex Allenatore:

http://www.weitz.de/regex-coach/

anche sentito buone cose su di RegexBuddy:

http://www.regexbuddy.com/

Come forse sapete, Oracle ha ora le espressioni regolari: http://www.oracle.com/technology/oramag/webcolumns/2003/techarticles/rischert_regexp_pt1.html.Ho usato la nuova funzionalità in un paio di query, ma non è stato così utile come in altri contesti.Il motivo, credo, è che le espressioni regolari sono più adatti per la ricerca di dati strutturati sepolto all'interno di dati non strutturati.

Per esempio, potrei usare una regex per trovare Oracle messaggi che sono farcite in file di log.Non è possibile sapere se i messaggi sono-solo per come appaiono.Così una regex è la soluzione migliore a questo problema.Quando si lavora con un database relazionale, i dati è di solito pre-strutturato, in modo che una regex non brillare in quel contesto.

Una di espressioni regolari (regex o regexp, in breve) è una particolare stringa di testo per descrivere un modello di ricerca.Si può pensare di espressioni regolari come caratteri jolly su steroidi.Si sono probabilmente familiarità con jolly notazioni quali *.txt per trovare tutti i file di testo in un file manager.L'espressione regolare è equivalente .*\.txt$.

Una grande risorsa per le espressioni regolari: http://www.regular-expressions.info

Questi RE sono specifici per Visual Studio e C++, ma ho trovato utile, a volte:

Trovare tutte le occorrenze di "routineName" con i non-default dei parametri passati:

routineName\(a+\)

Al contrario per trovare tutte le occorrenze di "routineName" solo con impostazioni di default: routineName\(\)

Per trovare il codice attivata (o disattivata) in una build di debug:

\#se._DEBUG*

Si noti che questo prenderà tutte le varianti:ifdef, se definito, ifndef, se !definito

La convalida di password complesse:

Questo convalidare una password con una lunghezza da 5 a 10 caratteri alfanumerici, con almeno una maiuscola, una minuscola e una cifra:

^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9]{5,10}$
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top