Expresii regulate în Java
O expresie regulată este un fel de șablon care poate fi aplicat textului (String, Java). Java oferă pachetul java.util.regex pentru potrivirea expresiilor regulate. Expresiile regulate sunt foarte asemănătoare limbajului de programare Perl și sunt foarte ușor de învățat.
Expresia obișnuită fie se potrivește cu textul (o parte a acestuia), fie nu.
* Dacă expresia regulată se potrivește cu o parte a textului, atunci o găsim.
** Dacă expresia regulată este compusă, putem să aflăm cu ușurință care parte din expresia regulată se potrivește cu ce parte a textului.
Primul exemplu
Expresia obișnuită "[a-z] +" se potrivește cu toate literele mici din text.
[a-z] înseamnă orice caracter de la a la z inclusiv și + înseamnă "unul sau mai multe" caractere.
Să presupunem că furnizăm șirul "code 2 learn tutorial java".
Cum se face acest lucru în Java
În primul rând, trebuie să creați un șablon:
Apoi, trebuie să creați o potrivire pentru text prin trimiterea unui mesaj către schemă:
NOTĂ:
Nici modelul, nici Matcher nu au constructori, le creăm folosind metodele din clasa Pattern.
Clasa de modele: Obiectul clasei reprezintă reprezentarea expresiei regulate. Clasa de modele nu oferă niciun constructor public. Pentru a crea un șablon, trebuie mai întâi să apelați una dintre metodele statice publice, care apoi returnează un obiect Pattern. Aceste metode au o expresie regulată ca argument.
Matcher Class: Obiectul Seeker este motorul care interpretează modelul și efectuează operații de potrivire pe șirul de intrare. Ca și în clasa Pattern, Matcher nu are constructori publici. Obțineți un obiect Matcher apelând metoda matcher. pe modelul de obiect Model.
După ce am terminat acești pași și acum avem o copie a clasei Matcher m. iar acum putem verifica dacă șablonul a fost găsit sau nu, și dacă da, în ce poziție, etc.
m.matches () returnează true dacă modelul se potrivește întregului șir, altfel este fals.
m.lookingAt () returnează true dacă modelul se potrivește cu începutul șirului și altfel fals.
m.find () returnează true dacă modelul se potrivește cu orice parte a textului.
După o potrivire reușită, m.start () returnează indexul primului caracter care se potrivește și m.end () returnează indexul ultimului caracter matched plus one.
Dacă s-a făcut o încercare nereușită și nu sa găsit nici o potrivire, m.start () și m.end () ar arunca IllegalStateException
- Aceasta este o excepție de rulare, deci nu trebuie să-l prindeți.
S-ar părea ciudat faptul că m.end () returnează indexul ultimului caracter matched plus unul, dar acesta este exact ceea ce este cerut de majoritatea metodelor din clasa String.
- De exemplu, "Acum este ora" .substring (m.start (), m.end ())
va reveni la același șir.
Să ne uităm la cod:
Dacă există o coincidență, atunci
- m.replaceFirst (înlocuire) returnează o nouă linie, în care primul substring care se potrivește cu modelul va fi înlocuit cu înlocuirea
- m.replaceAll (înlocuire) returnează o nouă linie, în care fiecare subrevisă care se potrivește cu modelul va fi înlocuită
- m.find (StartIndex) găsiți următorul meci pornind de la indexul specificat
- m.reset () resetează șablonul
- m.reset (NewText) resetează crawler-ul și îi oferă un text nou (poate String, StringBuffer sau CharBuffer)
Sintaxă de expresie regulată
^ Se potrivește cu începutul liniei.
$ Se potrivește cu sfârșitul liniei.
. Se potrivește cu un singur caracter, cu excepția caracterului de linie nouă. Utilizarea opțiunii m îi permite să se potrivească cu o linie nouă.
[. ] Se potrivește cu orice caracter unic în paranteze.
[^. ] Se potrivește cu orice caracter unic, nu în paranteze.
\ A Porniți întreaga linie.
\ z Sfarsitul intregii linii.
\ Z Sfârșitul întregii linii, cu excepția terminatorului final al liniei.
re * Meciuri 0 sau mai multe apariții ale expresiei precedente.
re + Un sau mai multe potriviri ale expresiei anterioare.
re? Corespunde poziției 0 sau 1 a expresiei anterioare.
re Corespunde exact N Numărul de apariții ale expresiei precedente.
re Corespunde la N sau mai multe apariții ale expresiei precedente.
re Maturi cel puțin n și în cele mai multe m apariții ale expresiei precedente.
a | b Corespunde a sau b.
(re) Un grup de expresii regulate și amintirea textului găsit.
(.re) Grupuri de expresii regulate care nu-și amintesc textul găsit.
(?> re) Se potrivește cu un model independent fără întoarcere.
\ w Se potrivește cu literele.
\ W Se potrivește cu caractere non-alfabetice.
\ s Se potrivește cu spațiile. Echivalent cu [\ t \ n \ r \ f].
\ S Caracterele care nu sunt albe.
\ d Corespunde numerelor. Este echivalent cu [0-9].
\ D Nu corespunde numerelor.
\ G Se potrivește cu punctul ultimului meci.
\ n Se potrivește cu o nouă linie.
\ b Se potrivesc cu limita cuvântului.
\ B Nu coincide cu limita cuvântului.
\ n, \ t, etc. Caractere Newline, retur de călătorie, file etc.
\ Q Citați toate caracterele înainte de \ E.
\ E Citatul începe cu \ Q.
Domnilor, ajutați-mă, vă rog. Încerc să scriu o expresie regulată pentru a introduce o altă linie după ieșirea a două linii.
Încerc să creez un șablon astfel:
Se pare că nu înțeleg deloc principiul. Am citit, am citit, dar într-un fel nu a fost amânată. Este necesar să se înțeleagă exemple specifice. Pune-ți nasul, te rog, așa cum scriu.
Mulțumesc.
A scris în final așa, dar este un fel de cârjă ...