java regex tutorial with regular expression examples
Tento výukový program Java Regex vysvetľuje, čo je regulárny výraz v jazyku Java, prečo ho potrebujeme a ako ho používať pomocou príkladov regulárnych výrazov:
TO regulárny výraz v Jave, ktorá je skrátená ako „ regulárny výraz ”Je výraz, ktorý sa používa na definovanie vzoru vyhľadávania pre reťazce.
Vyhľadávacím vzorom môže byť jednoduchý znak alebo podreťazec, alebo to môže byť zložitý reťazec alebo výraz, ktorý definuje konkrétny vzor, ktorý sa má v reťazci vyhľadať.
Ďalej môže byť potrebné, aby sa vzor raz alebo viackrát zhodoval s reťazcom.
=> Navštívte tu a pozrite si sériu školení Java pre všetkých.
Čo sa dozviete:
Regulárny výraz: Prečo to potrebujeme
Regulárny výraz sa používa hlavne na hľadanie vzoru v reťazci. Prečo hľadáme vzor v reťazci? Možno budeme chcieť nájsť konkrétny vzor v reťazci a potom s ním manipulovať alebo ho upraviť.
Takže v počítačovej aplikácii môžeme mať neustálu požiadavku na manipuláciu s rôznymi vzormi. Preto vždy vyžadujeme regulárny výraz, aby sme uľahčili hľadanie vzoru.
Teraz je uvedený vyhľadávací vzor, ako presne funguje regulárny výraz?
Keď analyzujeme a upravujeme text pomocou regulárneho výrazu, hovoríme, že „na reťazec alebo text sme použili regulárny výraz“. To, čo robíme, je to, že na text nanesieme vzor „zľava doprava“ a zdrojový reťazec je porovnaný so vzorom.
Napríklad, zvážte reťazec “ ababababab “. Predpokladajme, že je definovaný regex „aba“. Takže teraz musíme použiť tento regulárny výraz na reťazec. Ak použijeme regulárny výraz zľava doprava, regulárny výraz bude zodpovedať reťazcu „ aba_aba___ ”, Na dvoch miestach.
Ak je teda zdrojový znak použitý v zhode, nemôžeme ho znova použiť. Po nájdení prvého zápasu aba teda tretí znak „a“ nebol znovu použitý.
open source nástroje na testovanie medzi prehliadačmi
java.util.regex
Jazyk Java neposkytuje žiadnu integrovanú triedu pre regulárny výraz. S regulárnymi výrazmi však môžeme pracovať importom „ java.util.regex ”Balíček.
Balík java.util.regex poskytuje jedno rozhranie a tri triedy, ako je uvedené nižšie:
Trieda vzoru: Trieda vzorov predstavuje skompilovaný regulárny výraz. Trieda Pattern nemá žiadne verejné konštruktory, poskytuje však statické metódy kompilácie (), ktoré vracajú objekty Pattern, a je možné ich použiť na vytvorenie vzoru.
Trieda zápasníkov: Objekt triedy Matcher zodpovedá vzoru regulárneho výrazu s reťazcom. Rovnako ako trieda Pattern, ani táto trieda neposkytuje žiadne verejné konštruktory. Poskytuje metódu matcher (), ktorá vracia objekt Matcher.
PatternSyntaxException: Táto trieda definuje neoznačenú výnimku. Objekt typu PatternSyntaxException vracia nekontrolovanú výnimku označujúcu chybu syntaxe vo vzore regulárneho výrazu.
Rozhranie MatchResult: Rozhranie MatchResult určuje výsledok zhody vzoru regulárneho výrazu.
Príklad Java Regex
Poďme si implementovať jednoduchý príklad regexu v Jave. V nižšie uvedenom programe máme jednoduchý reťazec ako vzor, ktorý potom priradíme k reťazcu. Výstup vytlačí začiatočnú a koncovú pozíciu v reťazci, kde sa nachádza vzor.
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String args()) { //define a pattern to be searched Pattern pattern = Pattern.compile('Help.'); // Search above pattern in 'softwareTestingHelp.com' Matcher m = pattern.matcher('softwareTestingHelp.com'); // print the start and end position of the pattern found while (m.find()) System.out.println('Pattern found from position ' + m.start() + ' to ' + (m.end()-1)); } }
Výkon:
Vzor nájdený od 15 do 19
Regex Matcher v Jave
Trieda matcher implementuje rozhranie MatchResult. Matcher funguje ako regulárny výraz a používa sa na presné porovnanie postupnosti znakov.
Ďalej sú uvedené bežné metódy triedy Matcher. Má viac metód, ale nižšie sú uvedené iba dôležité metódy.
Nie | Metóda | Popis |
---|---|---|
7 | int start () | Poskytne počiatočný index zhodnej subsekvencie a vráti ju. |
1 | booleovské zápasy () | Skontroluje, či sa regulárny výraz zhoduje so vzorom. |
dva | Vzor vzoru () | Vráti vzor, ktorý interpretuje porovnávač. |
3 | booleovský nález () | Táto metóda vyhľadá nasledujúci výraz, ktorý sa má zhodovať so vzorom. |
4 | boolean find (int start) | Rovnaké ako find (), ale nájde výraz, ktorý sa má zhodovať z danej počiatočnej pozície. |
5 | Skupina reťazcov () | Vráti subsekvenciu zodpovedajúcu vzoru. |
6 | Skupina reťazcov (názov reťazca) | Vráti postupnosť vstupu. Toto je zachytené v predchádzajúcej operácii zhody zachytením skupiny so zadaným menom. |
8 | int end () | Vráti koncovú pozíciu / index zhodnej subsekvencie. |
9 | int groupCount () | Vráti celkový počet zhodných podsekvencií. |
10 | Výmena reťazca Všetko (Výmena reťazca) | Nahraďte všetky podsekvencie vstupnej sekvencie, ktoré sa zhodujú so vzorom, zadaným náhradným reťazcom. |
jedenásť | Výmena reťazca Najprv (Výmena reťazca) | Prvú zodpovedajúcu podsekvenciu vstupnej sekvencie nahraďte zadaným náhradným reťazcom. |
12 | String toString () | Vráti reťazcovú reprezentáciu aktuálneho porovnávača. |
Príklad implementácie regulárneho výrazu
Pozrime sa na príklad použitia niektorých z týchto metód.
import java.util.regex.Matcher; import java.util.regex.Pattern; public class MatcherDemo { public static void main(String() args) { String inputString = 'She sells sea shells on the sea shore with shells'; //obtain a Pattern object Pattern pattern = Pattern.compile('shells'); // obtain a matcher object System.out.println('input string: ' + inputString); Matcher matcher = pattern.matcher(inputString); inputString = matcher.replaceFirst('pearls'); System.out.println('
replaceFirst method:' + inputString); //use replaceAll method to replace all occurrences of pattern inputString = matcher.replaceAll('pearls'); System.out.println('
replaceAll method:' + inputString); } }
Výkon:
vstupný reťazec: S mušľami predáva mušle na brehu mora
Metóda replaceFirst: Predáva morské perly na brehu mora s mušľami
Metóda replaceAll: Perly predáva morské perly na brehu mora
Regex vzorová trieda v Jave
Trieda vzoru definuje vzor pre modul regulárneho výrazu, ktorý sa potom dá použiť na porovnanie so vstupným reťazcom.
Nasledujúca tabuľka zobrazuje metódy poskytované bežne používanou triedou Pattern.
Nie | Metóda | Popis |
---|---|---|
7 | Rozdelenie reťazca () (vstup CharSequence, limit int) | Vstupný reťazec je rozdelený na zhody nájdené daným vzorom. |
1 | statická kompilácia vzoru (reťazcový regulárny výraz) | Vráti skompilovanú reprezentáciu regulárneho výrazu. |
dva | statická kompilácia vzoru (reťazcový regulárny výraz, príznaky int) | Zkompiluje daný regulárny výraz pomocou zadaných vzorov príznakov a návratov. |
3 | Zhoduje sa so zhodami (vstup CharSequence) | Vráti porovnávač, ktorý porovná vstupnú postupnosť so vzorom. |
4 | statické booleovské zhody (reťazcový regulárny výraz, vstup CharSequence) | Zkompiluje daný regulárny výraz a porovná vzor so zadaným vstupom. |
5 | príznaky int () | Vráti vlajky vzoru, s ktorým sa vykonáva zhoda. |
6 | Rozdelenie reťazca () (vstup CharSequence) | Vstupný reťazec je rozdelený na zhody nájdené daným vzorom. |
8 | Reťazcový vzor () | Vráti vzor regulárneho výrazu. |
9 | statický reťazcový citát (reťazce s) | Vráti doslovný reťazec (vzor) pre daný reťazec. |
10 | String toString () | Získajte reťazcové znázornenie vzoru. |
Nasledujúci príklad používa niektoré z vyššie uvedených spôsobov triedy Pattern.
import java.util.regex.*; public class Main { public static void main(String() args) { // define a REGEX String String REGEX = 'Test'; // string to be searched for given pattern String actualString = 'Welcome to SoftwareTestingHelp portal'; // generate a pattern for given regex using compile method Pattern pattern = Pattern.compile(REGEX); // set limit to 2 int limit = 2; // use split method to split the string String() array = pattern.split(actualString, limit); // print the generated array for (int i = 0; i Výkon:
pole (0) = Vitajte v softvéri
pole (1) = portál ingHelp
najlepší program na obnovenie zmazaných súborov
Vo vyššie uvedenom programe používame na vygenerovanie vzoru metódu kompilácie. Potom sme rozdelili vstupný reťazec o tomto vzore a prečítali ho do poľa. Na záver zobrazíme pole, ktoré bolo vygenerované v dôsledku rozdelenia vstupného reťazca.
Metóda Regex String Matches
Metódu String.Contains () sme videli v našich cvičeniach s reťazcami. Táto metóda vracia boolovskú hodnotu true alebo false v závislosti od toho, či reťazec obsahuje zadaný znak alebo nie.
Podobne máme metódu „match ()“ na kontrolu, či sa reťazec zhoduje s regulárnym výrazom alebo regulárnym výrazom. Ak sa reťazec zhoduje so zadaným regulárnym výrazom, vráti sa true hodnota alebo sa vráti false.
Všeobecná syntax metódy match ():
public boolean matches (String regex)
Ak zadaný regulárny výraz nie je platný, potom sa vyvolá výnimka „PatternSyntaxException“.
Implementujme program na demonštráciu použitia metódy match ().
public class MatchesExample{ public static void main(String args()){ String str = new String('Java Series Tutorials'); System.out.println('Input String: ' + str); //use matches () method to check if particular regex matches to the given input System.out.print('Regex: (.*)Java(.*) matches string? ' ); System.out.println(str.matches('(.*)Java(.*)')); System.out.print('Regex: (.*)Series(.*) matches string? ' ); System.out.println(str.matches('(.*)Series(.*)')); System.out.print('Regex: (.*)Series(.*) matches string? ' ); System.out.println(str.matches('(.*)String(.*)')); System.out.print('Regex: (.*)Tutorials matches string? ' ); System.out.println(str.matches('(.*)Tutorials')); } }
Výkon:
Vstupný reťazec: Výukové programy série Java
Regex: (. *) Java (. *) Sa zhoduje s reťazcom? pravda
Regex: (. *) Séria (. *) Sa zhoduje s reťazcom? pravda
Regex: (. *) Séria (. *) Sa zhoduje s reťazcom? nepravdivé
Regex: (. *) Návody sa zhodujú s reťazcom? pravda
V Jave používame veľa špeciálnych znakov a metaznakov s regulárnymi výrazmi. Na porovnávanie vzorov používame tiež veľa tried znakov. V tejto časti ponúkneme tabuľky obsahujúce triedy znakov, metaznaky a kvantifikátory, ktoré je možné použiť s regulárnym výrazom.
Triedy znakov regulárneho výrazu
Nie Trieda znakov Popis 7 (a-z && (^ m-p)) Odčítanie: a až z, a nie m až p: (a-lq-z) 1 (pqr) p, q alebo r dva (^ pqr) Negácia: Akýkoľvek znak iný ako p, q alebo r 3 (a-zA-Z) Rozsah: a až z alebo A až Z vrátane 4 (a-d (m-p)) Spojenie: a až d alebo m až p: (a-dm-p) 5 (a-z && (def)) Priesečník: d, e alebo f 6 (a-z && (^ bc)) Odčítanie: od a do z, okrem b a c: (ad-z)
Regex kvantifikátory
Kvantifikátory sa používajú na určenie počtu výskytov znaku v regulárnom výraze.
V nasledujúcej tabuľke sú uvedené bežné kvantifikátory regulárneho výrazu používané v prostredí Java.
Nie Kvantifikátor regulárneho výrazu Popis 7 IN Akýkoľvek neslovný znak, (^ w) 1 X? x sa objaví raz alebo vôbec dva x + x sa objaví jeden alebo viackrát 3 X * x sa vyskytuje nula alebo viackrát 4 x {n} x sa vyskytuje n-krát 5 x {n,} x sa vyskytuje n alebo viackrát 6 X a Z} x sa vyskytuje najmenej y-krát, ale menej ako z-krát
Regex Meta Postavy
Metaznaky v regulárnom výraze fungujú ako skratkové kódy. Tieto kódy zahŕňajú medzery a znaky iných znakov spolu s ďalšími krátkymi kódmi.
V nasledujúcej tabuľke je uvedený zoznam znakov regex Meta.
Nie Postavy meta Popis 1 . Akýkoľvek znak (môže, ale nemusí sa zhodovať s terminátorom) dva d Ľubovoľné číslice, (0-9) 3 D Všetky číslice, (^ 0-9) 4 s Akýkoľvek znak medzery, ( t n x0B f r) 5 S Akýkoľvek znak bez medzier, (^ s) 6 v Ľubovoľný znak slova, (a-zA-Z_0-9) 8 b Hranica slova 9 B Neslovná hranica
Ďalej je uvedený program Java, ktorý v Regexe používa vyššie uvedené špeciálne znaky.
import java.util.regex.*; public class RegexExample{ public static void main(String args()){ // returns true if string exactly matches 'Jim' System.out.print('Jim (jim):' + Pattern.matches('Jim', 'jim')); // Returns true if the input string is Peter or peter System.out.println('
(Pp)eter(Peter) :' + Pattern.matches('(Pp)eter', 'Peter')); //true if string = abc System.out.println('
.*abc.*(pqabcqp) :' + Pattern.matches('.*abc.*', 'pqabcqp')); // true if string doesn't start with a digit System.out.println('
^(^\d).*(abc123):' + Pattern.matches('^(^\d).*', 'abc123')); // returns true if the string contains exact three letters System.out.println('
(a-zA-Z)(a-zA-Z)(a-zA-Z) (aQz):' + Pattern.matches('(a-zA-Z)(a-zA-Z)(a-zA-Z)', 'aQz')); System.out.println('
(a-zA-Z)(a-zA-Z)(a-zA-Z), a10z' + Pattern.matches('(a-zA-Z)(a-zA-Z)(a-zA-Z), a10z', 'a10z')); //input string length = 4 // true if the string contains 0 or more non-digits System.out.println('
\D*, abcde:' + Pattern.matches('\D*', 'abcde')); //True // true of line contains only word this ^-start of the line, $ - end of the line System.out.println('
^This$, This is Java:' + Pattern.matches('^This$', 'This is Java')); System.out.println('
^This$, This:' + Pattern.matches('^This$, This', 'This')); System.out.println('
^This$, Is This Java?:' + Pattern.matches('^This$, Is This Java?', 'Is This Java?')); } }
Výkon:
Jim (jim): nepravda
(Pp) eter (Peter): pravda
. * abc. * (pqabcqp): true
^ (^ d). * (abc123): pravda
(a-zA-Z) (a-zA-Z) (a-zA-Z) (aQz): pravda
(a-zA-Z) (a-zA-Z) (a-zA-Z), a10zfalse
D *, abcde: true
^ This $, This is Java: false
^ This $, This: false
^ This $, Is This Java?: False
Vo vyššie uvedenom programe sme poskytli rôzne regulárne regulárne výrazy, ktoré sa zhodujú so vstupným reťazcom. Čitateľom sa odporúča prečítať si komentáre v programe ku každému regulárnemu výrazu, aby lepšie pochopili tento pojem.
Regex logický alebo (|) operátor
Môžeme použiť logický operátor alebo (| operátor) v regulárnom výraze, ktorý nám dáva možnosť vybrať jeden z operandov | operátor. Tento operátor môžeme použiť v regulárnom výraze na výber znaku alebo reťazca. Napríklad, ak sa chceme zhodovať so slovami, test aj test, zahrnieme tieto slová do logického alebo operátora ako Test | test.
Pozrime sa na nasledujúci príklad na pochopenie tohto operátora.
import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexOR { public static void main(String() args) { // Regex string to search for patterns Test or test String regex = '(Test|test)'; // Compiles the pattern and obtains the matcher object from input string. Pattern pattern = Pattern.compile(regex); String input = 'Software Testing Help'; Matcher matcher = pattern.matcher(input); // print every match while (matcher.find()) { System.out.format('Text '%s' found at %d to %d.%n', matcher.group(), matcher.start(), matcher.end()); } //define another input string and obtain the matcher object input = 'SoftwaretestingHelp'; matcher = pattern.matcher(input); // Print every match while (matcher.find()) { System.out.format('Text '%s' found at %d to %d.%n', matcher.group(), matcher.start(), matcher.end()); } } }
Výkon:
Text „Test“ nájdený od 9 do 13.
Text „test“ nájdený od 8 do 12.
V tomto programe sme poskytli regulárny výraz „(Test | test)“. Potom najskôr dáme vstupný reťazec ako „Pomocník pre testovanie softvéru“ a bude sa zhodovať so vzorom. Vidíme, že je nájdená zhoda a pozícia je vytlačená.
Ďalej zadáme vstupný reťazec ako „SoftwaretestingHelp“. Tentokrát sa nájde aj zhoda. Je to preto, lebo regulárny výraz použil operátor alebo operátor, a teda vzor na oboch stranách znaku | operátor je priradený k reťazcu.
Overenie e-mailu pomocou nástroja Regex
Môžeme tiež overiť e-mailovú adresu (adresu) pomocou regulárneho výrazu pomocou metódy java.util.regex.Pattern.matches (). Porovná dané ID e-mailu s regulárnym výrazom a vráti hodnotu true, ak je e-mail platný.
Nasledujúci program demonštruje overenie e-mailov pomocou regulárneho výrazu.
public class EmailDemo { static boolean isValidemail(String email) { String regex = '^(\w-_\.+)*(\w-_\.)\@((\w)+\.)+(\w)+(\w)$'; //regex to validate email. return email.matches(regex); //match email id with regex and return the value } public static void main(String() args) { String email = 'ssthva@gmail.com'; System.out.println('The Email ID is: ' + email); System.out.println('Email ID valid? ' + isValidemail(email)); email = '@sth@gmail.com'; System.out.println('The Email ID is: ' + email); System.out.println('Email ID valid? ' + isValidemail(email)); } }
Výkon:
E-mailová adresa je: ssthva@gmail.com
E-mailová adresa je platná? pravda
E-mailová adresa je: @ sth @ gmail.com
E-mailová adresa je platná? nepravdivé
Ako vidíme z vyššie uvedeného výstupu, prvé ID e-mailu je platné. Druhé id priamo začína znakom @, a preto ho regulárny výraz neoveruje. Preto je to neplatné ID.
ako spustiť spustiteľný súbor jar
často kladené otázky
Otázka 1) Čo je v regulárnom výraze?
Odpoveď: TO Regulárny výraz regex sa bežne nazýva vzor alebo postupnosť znakov (normálne alebo špeciálne alebo metaznaky), ktorá sa používa na overenie vstupného reťazca.
Otázka 2) Aký je význam triedy Matcher pre regulárny výraz v Jave?
Odpoveď: Trieda porovnávačov (java.util.regex.Matcher) funguje ako modul regexu. Vykonáva operácie zhody interpretáciou vzoru.
Otázka č. 3) Aký je vzor v prostredí Java?
Odpoveď: Balík java.util.regex poskytuje triedu Pattern, ktorá sa používa na kompiláciu regulárneho výrazu do vzoru, ktorý je štandardnou reprezentáciou pre regulárny výraz. Tento vzor sa potom použije na overenie reťazcov jeho zladením so vzorom.
Otázka č. 4) Čo je B v regulárnom výraze?
Odpoveď: B v regulárnom výraze je označené ako b a je kotviacim znakom, ktorý sa používa na priradenie pozície zvanej hranica slova. Začiatok riadku je označený znakom caret (^) a koniec riadku je označený znakom dolára ($).
Otázka č. 5) Je vzor bezpečný pre vlákna Java?
Odpoveď: Áno. Inštancie triedy Pattern sú nemenné a bezpečné na použitie viacerými súbežnými vláknami. Ale inštancie triedy matcher nie sú bezpečné pre vlákna.
Záver
V tomto tutoriáli sme diskutovali o regulárnych výrazoch v Jave. Regulárny výraz, ktorý sa tiež nazýva „regex“, sa používa na overenie vstupného reťazca v jazyku Java. Java poskytuje „ java.util.regex ' balíček, ktorý poskytuje triedy ako Pattern, Matcher atď., ktoré pomáhajú definovať a porovnávať vzor so vstupným reťazcom.
Tiež sme videli rôzne špeciálne triedy znakov a metaznakov, ktoré môžeme použiť v regulárnom výraze a ktoré poskytujú skratkové kódy na porovnávanie vzorov. Preskúmali sme tiež overenie e-mailu pomocou regulárneho výrazu.
=> Preskúmajte tu jednoduchú sériu školení Java.
Odporúčané čítanie