java regex tutorial with regular expression examples
Tento výukový program Java Regex vysvětluje, co je regulární výraz v jazyce Java, proč ho potřebujeme a jak jej používat pomocí příkladů regulárních výrazů:
NA regulární výraz v Javě, který je zkrácen jako „ regulární výraz ”Je výraz, který se používá k definování vzoru hledání řetězců.
Vyhledávacím vzorem může být jednoduchý znak nebo podřetězec nebo to může být složitý řetězec nebo výraz, který definuje konkrétní vzor, který má být v řetězci prohledán.
Dále může být nutné, aby se vzor jednou nebo vícekrát shodoval s řetězcem.
=> Navštivte zde a prohlédněte si sérii školení Java pro všechny.
Co se naučíte:
Pravidelný výraz: Proč to potřebujeme
Regulární výraz se používá hlavně k hledání vzoru v řetězci. Proč hledáme vzor v řetězci? Možná budeme chtít najít určitý vzor v řetězci a poté s ním manipulovat nebo jej upravit.
Takže v počítačové aplikaci můžeme mít neustálý požadavek na manipulaci s různými vzory. Proto vždy vyžadujeme regex, abychom usnadnili hledání vzoru.
Nyní je dán vzor k hledání, jak přesně regex funguje?
Když analyzujeme a upravujeme text pomocí regexu, říkáme, že „jsme na řetězec nebo text použili regex“. Co uděláme, použijeme vzor na text ve směru „zleva doprava“ a zdrojový řetězec se shoduje se vzorem.
Například, zvažte řetězec “ ababababab “. Předpokládejme, že je definován regulární výraz „aba“. Takže teď musíme použít tento regulární výraz na řetězec. Použitím regulárního výrazu zleva doprava bude regulární výraz odpovídat řetězci „ aba_aba___ ”, Na dvou místech.
Jakmile je tedy zdrojový znak použit v zápase, nemůžeme jej znovu použít. Po nalezení první shody aba tedy nebyl znovu použit třetí znak „a“.
java 8 rozhovor otázky a odpovědi
java.util.regex
Jazyk Java neposkytuje žádnou integrovanou třídu pro regex. Ale můžeme pracovat s regulárními výrazy importem „ java.util.regex ”Balíček.
Balíček java.util.regex poskytuje jedno rozhraní a tři třídy, jak je uvedeno níže:
Třída vzoru: Třída vzoru představuje kompilovaný regulární výraz. Třída Pattern nemá žádné veřejné konstruktory, ale poskytuje statické metody kompilace (), které vracejí objekty Pattern a lze je použít k vytvoření vzoru.
Matcher Class: Objekt třídy Matcher odpovídá vzoru regulárního výrazu řetězci. Stejně jako třída Pattern, ani tato třída neposkytuje žádné veřejné konstruktory. Poskytuje metodu matcher (), která vrací objekt Matcher.
PatternSyntaxException: Tato třída definuje nezaškrtnutou výjimku. Objekt typu PatternSyntaxException vrací nekontrolovanou výjimku označující chybu syntaxe ve vzoru regulárního výrazu.
Rozhraní MatchResult: Rozhraní MatchResult určuje výsledek shody vzoru regulárního výrazu.
Příklad Java Regex
Pojďme implementovat jednoduchý příklad regexu v Javě. V níže uvedeném programu máme jednoduchý řetězec jako vzor a poté jej spojíme s řetězcem. Výstup vytiskne počáteční a koncovou pozici v řetězci, kde je nalezen 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ýstup:
Vzor nalezen od 15 do 19
Regex Matcher v Javě
Třída matcher implementuje rozhraní MatchResult. Matcher funguje jako modul regulárního výrazu a používá se k přesnému porovnávání posloupnosti znaků.
Níže jsou uvedeny běžné metody třídy Matcher. Má více metod, ale níže uvádíme pouze důležité metody.
Nedělej | Metoda | Popis |
---|---|---|
7 | int start () | Poskytne počáteční index shodné posloupnosti a vrátí jej. |
1 | booleovské zápasy () | Zkontroluje, zda se regulární výraz shoduje se vzorem. |
dva | Vzor vzor () | Vrátí vzor, který interpretátor porovnává. |
3 | booleovský nález () | Tato metoda najde další výraz, který se má shodovat se vzorem. |
4 | boolean find (int start) | Stejné jako find (), ale najde výraz, který má být porovnán z dané počáteční pozice. |
5 | Řetězcová skupina () | Vrátí posloupnost odpovídající vzoru. |
6 | Skupina řetězců (název řetězce) | Vrátí posloupnost vstupu. To je zachyceno v dřívější operaci shody zachycením skupiny se zadaným názvem. |
8 | zamýšlet() | Vrátí koncovou pozici / index shodné posloupnosti. |
9 | int groupCount () | Vrátí celkový počet shodných posloupností. |
10 | String replaceAll (String replacement) | Nahraďte všechny podsekvence vstupní sekvence, které odpovídají vzoru zadaným náhradním řetězcem. |
jedenáct | String replaceFirst (String replacement) | Nahraďte první odpovídající subsekvenci vstupní sekvence zadaným náhradním řetězcem. |
12 | String toString () | Vrátí řetězcovou reprezentaci aktuálního porovnávače. |
Příklad implementace regulárního výrazu
Podívejme se na příklad použití některých z těchto metod.
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ýstup:
vstupní řetězec: S mušlemi prodává mořské mušle na břehu moře
Metoda replaceFirst: Prodává mořské perly na břehu moře s mušlemi
metoda replaceAll: Prodává mořské perly na břehu moře s perlami
Regex Pattern Class v Javě
Třída Pattern definuje vzor pro regex engine, který pak může být použit k porovnání se vstupním řetězcem.
Následující tabulka ukazuje metody poskytované třídou Pattern, která se běžně používá.
Nedělej | Metoda | Popis |
---|---|---|
7 | Rozdělit řetězec () (vstup CharSequence, limit int) | Vstupní řetězec je rozdělen kolem shod nalezených daným vzorem. |
1 | statická kompilace vzoru (String regex) | Vrátí zkompilovanou reprezentaci regexu. |
dva | statická kompilace Pattern (String regex, int flags) | Zkompiluje daný regulární výraz pomocí zadaných příznaků a vrátí vzor. |
3 | Odpovídá shodám (vstup CharSequence) | Vrátí porovnávač porovnáním vstupní sekvence se vzorem. |
4 | statické booleovské shody (String regex, vstup CharSequence) | Zkompiluje daný regulární výraz a odpovídá vzoru s daným vstupem. |
5 | příznaky int () | Vrátí příznaky vzoru, se kterým se provádí párování. |
6 | Rozdělit řetězec () (vstup CharSequence) | Vstupní řetězec je rozdělen kolem shod nalezených daným vzorem. |
8 | Řetězcový vzor () | Vrátí vzor regulárního výrazu. |
9 | statická nabídka řetězce (řetězce s) | Vrátí doslovný řetězec (vzor) pro daný řetězec. |
10 | String toString () | Získejte řetězcovou reprezentaci vzoru. |
Níže uvedený příklad používá některé z výše uvedených metod třídy 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ýstup:
pole (0) = Vítejte v softwaru
pole (1) = portál ingHelp
Ve výše uvedeném programu použijeme ke kompilaci metodu kompilace. Pak jsme rozdělili vstupní řetězec o tomto vzoru a přečetli jej do pole. Nakonec zobrazíme pole, které bylo vygenerováno v důsledku rozdělení vstupního řetězce.
Metoda Regex String Matches
Metodu String.Contains () jsme viděli v našich cvičeních s řetězci. Tato metoda vrací booleovskou hodnotu true nebo false v závislosti na tom, zda řetězec obsahuje zadaný znak nebo ne.
Podobně máme metodu „match ()“ ke kontrole, zda se řetězec shoduje s regulárním výrazem nebo regulárním výrazem. Pokud se řetězec shoduje se zadaným regulárním výrazem, vrátí se true hodnota nebo se vrátí false.
Obecná syntaxe metody match ():
public boolean matches (String regex)
Pokud zadaný regulární výraz není platný, je vyvolána výjimka „PatternSyntaxException“.
Provedeme program, který předvede použití metody 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ýstup:
Vstupní řetězec: Výukové programy řady Java
Regex: (. *) Java (. *) Odpovídá řetězci? skutečný
Regex: (. *) Series (. *) Odpovídá řetězci? skutečný
Regex: (. *) Series (. *) Odpovídá řetězci? Nepravdivé
Regex: (. *) Výuky odpovídají řetězci? skutečný
V jazyce Java používáme spoustu speciálních znaků a metaznaků s regulárními výrazy. Pro porovnávání vzorů používáme také mnoho tříd postav. V této části poskytneme tabulky obsahující třídy znaků, znaky Meta a kvantifikátory, které lze použít s regulárním výrazem.
Třídy znaků regulárního výrazu
Nedělej Třída znaků Popis 7 (a-z && (^ m-p)) Odečtení: a až z, ne m až p: (a-lq-z) 1 (pqr) p, q nebo r dva (^ pqr) Negace: Jakýkoli jiný znak než p, q nebo r 3 (a-zA-Z) Rozsah: a až z nebo A až Z včetně 4 (a-d (m-p)) Spojení: a až d nebo m až p: (a-dm-p) 5 (a-z && (def)) Křižovatka: d, e nebo f 6 (a-z && (^ bc)) Odečtení: a až z, s výjimkou bac: (ad-z)
Regex kvantifikátory
Kvantifikátory se používají k určení počtu výskytů znaku v regulárním výrazu.
datové modelování rozhovor otázky a odpovědi pdf
Následující tabulka ukazuje běžné kvantifikátory regulárního výrazu používané v Javě.
Nedělej Kvantifikátor regulárního výrazu Popis 7 V Libovolný neslovný znak, (^ w) 1 X? x se objeví jednou nebo vůbec dva x + x se objeví jednou nebo vícekrát 3 X * x se vyskytuje nula nebo vícekrát 4 x {n} x se vyskytuje n krát 5 x {n,} x se vyskytuje n nebo vícekrát 6 X a Z} x se vyskytuje nejméně ykrát, ale méně než zkrát
Regex Meta Postavy
Metaznaky v regulárním výrazu fungují jako zkratkové kódy. Tyto kódy zahrnují mezery a znaky jiných znaků spolu s dalšími zkrácenými kódy.
V následující tabulce jsou uvedeny regex Meta znaky.
Nedělej Meta postavy Popis 1 . Libovolný znak (může nebo nemusí odpovídat terminátorovi) dva d Libovolné číslice, (0-9) 3 D Libovolný neciferný údaj, (^ 0-9) 4 s Libovolný znak mezery, ( t n x0B f r) 5 S Libovolný znak bez mezer, (^ s) 6 v Libovolný znak slova, (a-zA-Z_0-9) 8 b Hranice slova 9 B Neslovní hranice
Níže je uveden program Java, který v Regexu používá výše uvedené speciální 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ýstup:
Jim (jim): false
(Pp) eter (Peter): pravda
. * abc. * (pqabcqp): true
^ (^ d). * (abc123): true
(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
Ve výše uvedeném programu jsme poskytli různé regulární výrazy, které se shodují se vstupním řetězcem. Čtenářům se doporučuje, aby si přečetli komentáře v programu ke každému regulárnímu výrazu, aby lépe porozuměli konceptu.
Logický regulární výraz nebo (|) operátor
Můžeme použít logický nebo (| operátor) v regulárním výrazu, který nám dává možnost vybrat jeden z operandů | operátor. Tento operátor můžeme použít v regulárním výrazu k výběru znaku nebo řetězce. Například, pokud chceme spojit obě slova, 'test' a 'Test', zahrneme tato slova do logického nebo operátoru jako Test | test.
Podívejme se na následující příklad, abychom tomuto operátorovi porozuměli.
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ýstup:
Text „Test“ nalezen na 9 až 13.
Text „test“ nalezen od 8 do 12.
V tomto programu jsme poskytli regex „(Test | test)“. Nejprve přidáme vstupní řetězec jako „Software Testing Help“ a porovnáme vzor. Vidíme, že je nalezena shoda a pozice je vytištěna.
Dále zadáme vstupní řetězec jako „SoftwaretestingHelp“. Tentokrát se také najde shoda. Důvodem je, že regex použil operátor nebo operátor, a tedy vzor na obou stranách | operátor je uzavřeno s řetězcem.
Ověření e-mailu pomocí programu Regex
Můžeme také ověřit e-mailovou adresu (adresu) pomocí regulárního výrazu pomocí metody java.util.regex.Pattern.matches (). Shoduje se s daným ID e-mailu s regulárním výrazem a vrací true, pokud je e-mail platný.
Následující program demonstruje ověření e-mailu pomocí regexu.
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ýstup:
E-mailová adresa je: ssthva@gmail.com
E-mailová adresa je platná? skutečný
ID e-mailu je: @ sth @ gmail.com
E-mailová adresa je platná? Nepravdivé
Jak vidíme z výše uvedeného výstupu, první ID e-mailu je platné. Druhé ID začíná přímo na @, a proto jej regulární výraz neověřuje. Proto je to neplatné ID.
zásobník datové struktury c ++
Často kladené otázky
Otázka č. 1) Co je v regulárním výrazu?
Odpovědět: NA Regulární výraz běžně nazývaný regulární výraz je vzor nebo posloupnost znaků (normální nebo speciální znaky nebo znaky Meta), která se používá k ověření vstupního řetězce.
Otázka 2) Jaký je význam třídy Matcher pro regulární výraz v Javě?
Odpovědět: Třída matcher (java.util.regex.Matcher) funguje jako modul regex. Provádí operace shody interpretací vzoru.
Otázka č. 3) Jaký je vzor v Javě?
Odpovědět: Balíček java.util.regex poskytuje třídu Pattern, která se používá ke kompilaci regexu do vzoru, který je standardní reprezentací pro regex. Tento vzor se poté použije k ověření řetězců porovnáním se vzorem.
Otázka č. 4) Co je B v regulárním výrazu?
Odpovědět: B v regexu je označeno jako b a je kotevní znak, který se používá k porovnání pozice zvané hranice slova. Začátek řádku je označen stříškou (^) a konec řádku je označen znakem dolaru ($).
Otázka č. 5) Je vzor bezpečná pro Java?
Odpovědět: Ano. Instance třídy Pattern jsou neměnné a bezpečné pro použití více souběžných vláken. Instance třídy matcheru ale nejsou bezpečné pro vlákna.
Závěr
V tomto kurzu jsme diskutovali o regulárních výrazech v Javě. Regulární výraz, známý také jako „regulární výraz“, se používá k ověření vstupního řetězce v Javě. Java poskytuje „ java.util.regex ' balíček, který poskytuje třídy jako Pattern, Matcher atd., které pomáhají definovat a porovnat vzor se vstupním řetězcem.
Také jsme viděli různé speciální třídy znaků a metaznaky, které můžeme použít v regexu, které dávají zkratkové kódy pro porovnávání vzorů. Prozkoumali jsme také ověřování e-mailů pomocí regexu.
=> Prozkoumejte jednoduchou sérii školení Java zde.
Doporučené čtení