java regex tutorial with regular expression examples
Deze Java Regex-zelfstudie legt uit wat een reguliere expressie in Java is, waarom we deze nodig hebben en hoe u deze kunt gebruiken met behulp van voorbeelden van reguliere expressies:
NAAR reguliere expressie in Java wordt dat afgekort als ' regex ”Is een uitdrukking die wordt gebruikt om een zoekpatroon voor strings te definiëren.
Het zoekpatroon kan een eenvoudig teken of een subtekenreeks zijn, of het kan een complexe tekenreeks of uitdrukking zijn die een bepaald patroon definieert dat moet worden doorzocht in de tekenreeks.
Verder kan het zijn dat het patroon een of meerdere keren moet passen bij de string.
Bezoek hier om de Java-trainingsserie voor iedereen te zien.
Wat je leert:
Reguliere expressie: waarom we het nodig hebben
Een reguliere expressie wordt voornamelijk gebruikt om naar een patroon in een string te zoeken. Waarom zoeken we naar een patroon in een string? Misschien willen we een bepaald patroon in een string vinden en het vervolgens manipuleren of bewerken.
In een computertoepassing kunnen we dus een continue vereiste hebben om verschillende patronen te manipuleren. Daarom hebben we altijd regex nodig om het zoeken naar het patroon te vergemakkelijken.
Als u nu een patroon krijgt om naar te zoeken, hoe werkt de regex dan precies?
Wanneer we de tekst analyseren en wijzigen met een regex, zeggen we dat ‘we hebben regex toegepast op de string of tekst’. Wat we doen is dat we het patroon van links naar rechts op de tekst toepassen en de brontekenreeks met het patroon matchen.
Bijvoorbeeld, beschouw een string “ ababababab Laten we aannemen dat een regex ‘aba’ is gedefinieerd. Dus nu moeten we deze regex op de string toepassen. Door de regex van links naar rechts toe te passen, komt de regex overeen met de tekenreeks ' aba_aba___ ”, Op twee plaatsen.
Dus als een bronkarakter eenmaal in een overeenkomst is gebruikt, kunnen we het niet opnieuw gebruiken. Dus na het vinden van de eerste match aba, werd het derde karakter ‘a’ niet opnieuw gebruikt.
beste muziek mp3-downloader voor Android
java.util.regex
Java-taal biedt geen ingebouwde klasse voor regex. Maar we kunnen met reguliere expressies werken door de ' java.util.regex ' pakket.
Het pakket java.util.regex biedt één interface en drie klassen, zoals hieronder getoond:
Patroon klasse: Een patroonklasse vertegenwoordigt de gecompileerde regex. De klasse Pattern heeft geen openbare constructors, maar biedt statische compile () -methoden die Pattern-objecten retourneren en die kunnen worden gebruikt om een patroon te maken.
Matcher Klasse: Het Matcher-klasseobject komt overeen met het regex-patroon met de tekenreeks. Net als de Pattern-klasse biedt deze klasse ook geen openbare constructors. Het biedt de matcher () - methode die een Matcher-object retourneert.
PatternSyntaxException: Deze klasse definieert een ongecontroleerde uitzondering. Een object van het type PatternSyntaxException retourneert een ongecontroleerde uitzondering die duidt op een syntaxisfout in het regex-patroon.
MatchResult-interface: De MatchResult-interface bepaalt het resultaat van de regex-patroonovereenkomst.
Java Regex-voorbeeld
Laten we een eenvoudig voorbeeld van regex in Java implementeren. In het onderstaande programma hebben we een eenvoudige string als patroon en dan matchen we deze aan een string. De uitvoer drukt de begin- en eindpositie af in de string waar het patroon is gevonden.
Uitgang:
Patroon gevonden van 15 tot 19
Regex Matcher in Java
De matcher-klasse implementeert de MatchResult-interface. Matcher fungeert als een regex-engine en wordt gebruikt om de exacte overeenkomst van een tekenreeks uit te voeren.
Hieronder staan de gebruikelijke methoden van de Matcher-klasse. Het heeft meer methoden, maar we hebben alleen de belangrijke methoden hieronder vermeld.
Niet doen | Methode | Omschrijving |
---|---|---|
7 | int start () | Geeft de startindex van de overeenkomende subreeks en retourneert deze. |
1 | booleaanse overeenkomsten () | Controleert of de regex overeenkomt met het patroon. |
twee | Patroon patroon () | Retourneert het patroon dat de matcher interpreteert. |
3 | booleaanse vind () | Met deze methode wordt de volgende uitdrukking gevonden die aan het patroon moet worden aangepast. |
4 | boolean find (int start) | Hetzelfde als find () maar vindt de uitdrukking die moet worden vergeleken vanaf de opgegeven startpositie. |
5 | String groep () | Retourneert de subreeks die overeenkomt met het patroon. |
6 | Stringgroep (Stringnaam) | Retourneert de invoersubreeks. Dit wordt vastgelegd in de eerdere overeenkomstbewerking door de groep met de opgegeven naam vast te leggen. |
8 | int einde () | Geeft de eindpositie / index van de overeenkomende subreeks terug. |
9 | int groupCount () | Retourneert het totale aantal overeenkomende subreeksen. |
10 | String replaceAll (String vervanging) | Vervang alle subreeksen van de invoersequentie die overeenkomen met het patroon door een opgegeven vervangende string. |
elf | String replaceFirst (String vervanging) | Vervang de eerste overeenkomende subreeks van de invoersequentie door de opgegeven vervangende string. |
12 | String toString () | Retourneer de tekenreeksweergave van de huidige matcher. |
Voorbeeld van implementatie van reguliere expressie
Laten we een voorbeeld bekijken van het gebruik van enkele van deze methoden.
Uitgang:
waar zijn apk-bestanden opgeslagen op Android
input string: Ze verkoopt zeeschelpen aan de kust met schelpen
Vervangen Eerste methode: Ze verkoopt zeeparels aan de kust met schelpen
ReplaceAll methode: Ze verkoopt zeeparels aan de kust met parels
Regex-patroonklasse in Java
De patroonklasse definieert het patroon voor de regex-engine die vervolgens kan worden gebruikt om te matchen met de invoertekenreeks.
De volgende tabel toont de methoden die worden geboden door de Pattern-klasse die vaak wordt gebruikt.
Niet doen | Methode | Omschrijving |
---|---|---|
7 | String () split (CharSequence-invoer, int limiet) | De invoerstring is opgesplitst rond overeenkomsten die door een bepaald patroon zijn gevonden. |
1 | statisch patroon compileren (String regex) | Retourneert een gecompileerde weergave van de regex. |
twee | statisch patroon compileren (String regex, int vlaggen) | Compileert gegeven regex met behulp van gespecificeerde vlaggen en retourneert patroon. |
3 | Komt overeen met overeenkomsten (CharSequence-invoer) | Retourneert een overeenkomst door de invoersequentie af te stemmen op het patroon. |
4 | statische booleaanse overeenkomsten (String-regex, CharSequence-invoer) | Compileert de gegeven regex en matcht het patroon met een gegeven invoer. |
5 | int vlaggen () | Retourneert vlaggen van het patroon waarmee de overeenkomst is voltooid. |
6 | String () split (CharSequence-invoer) | De invoerstring is opgesplitst rond overeenkomsten die door een bepaald patroon zijn gevonden. |
8 | String patroon () | Retourneert het reguliere-expressiepatroon. |
9 | statische String quote (String s) | Retourneert een letterlijke tekenreeks (patroon) voor de opgegeven tekenreeks. |
10 | String toString () | Verkrijg een tekenreeksweergave van het patroon. |
In het onderstaande voorbeeld worden enkele van de bovenstaande methoden van de klasse Pattern gebruikt.
Uitgang:
array (0) = Welkom bij Software
array (1) = ingHelp-portaal
In het bovenstaande programma gebruiken we de compileermethode om een patroon te genereren. Vervolgens splitsen we de invoerstring over dit patroon en lezen deze in een array. Ten slotte geven we de array weer die is gegenereerd als gevolg van het splitsen van de invoertekenreeks.
Regex String komt overeen met methode
We hebben de String.Contains () methode gezien in onze string tutorials. Deze methode retourneert een booleaanse waarde true of false, afhankelijk van of de string een opgegeven teken bevat of niet.
Evenzo hebben we een methode “matches ()” om te controleren of de string overeenkomt met een reguliere expressie of regex. Als de tekenreeks overeenkomt met de opgegeven regex, wordt een true-waarde geretourneerd of wordt false geretourneerd.
De algemene syntaxis van de methode matches ():
Als de opgegeven regex niet geldig is, wordt de 'PatternSyntaxException' gegenereerd.
Laten we een programma implementeren om het gebruik van de methode matches () te demonstreren.
Uitgang:
Invoertekenreeks: zelfstudies uit de Java-serie
Regex: (. *) Java (. *) Komt overeen met tekenreeks? waar
Regex: (. *) Serie (. *) Komt overeen met tekenreeks? waar
Regex: (. *) Serie (. *) Komt overeen met tekenreeks? false
Regex: (. *) Tutorials komt overeen met string? waar
We gebruiken veel speciale tekens en metatekens met reguliere expressies in Java. We gebruiken ook veel karakterklassen voor het matchen van patronen. In deze sectie zullen we de tabellen aanbieden met tekenklassen, meta-tekens en kwantoren die kunnen worden gebruikt met regex.
Regex-tekenklassen
Niet doen | Karakterklasse | Omschrijving |
---|---|---|
7 | (a-z && (^ m-p)) | Aftrekken: a tot z, en niet m tot en met p: (a-lq-z) |
1 | (pqr) | p, q of r |
twee | (^ pqr) | Negatie: elk ander teken dan p, q of r |
3 | (a-zA-Z) | Bereik: a t / m z of A t / m Z, inclusief |
4 | (a-d (m-p)) | Vereniging: a tot en met d, of m tot en met p: (a-dm-p) |
5 | (a-z && (def)) | Kruising: d, e of f |
6 | (a-z && (^ bc)) | Aftrekken: a tot en met z, behalve voor b en c: (ad-z) |
Regex-kwantoren
Kwantoren worden gebruikt om het aantal keren te specificeren dat het teken in de regex zal voorkomen.
De volgende tabel toont de algemene regex-kwantoren die in Java worden gebruikt.
Niet doen | Regex-kwantor | Omschrijving |
---|---|---|
7 | IN | Elk niet-woordteken, (^ w) |
1 | X? | x verschijnt een keer of helemaal niet |
twee | x + | x verschijnt een of meerdere keren |
3 | x * | x komt nul of meer keer voor |
4 | x {n} | x komt n keer voor |
5 | x {n,} | x komt n of vaker voor |
6 | X en Z} | x komt minstens y keer voor, maar minder dan z keer |
Regex Meta-tekens
De metatekens in regex werken als steno-codes. Deze codes bevatten witruimte en niet-witruimte, samen met andere shortcodes.
De volgende tabel bevat de regex-metatekens.
Niet doen | Meta-tekens | Omschrijving |
---|---|---|
1 | | Elk teken (kan wel of niet overeenkomen met terminator) |
twee | d | Alle cijfers, (0-9) |
3 | D | Elk niet-cijferig, (^ 0-9) |
4 | s | Elk witruimte-teken, ( t n x0B f r) |
5 | S | Elk niet-witruimte-teken, (^ s) |
6 | in | Elk woordteken, (a-zA-Z_0-9) |
8 | b | Een woordgrens |
9 | B | Een niet-woordgrens |
Hieronder wordt een Java-programma gegeven dat de bovenstaande speciale tekens in de Regex gebruikt.
Uitgang:
Jim (Jim): vals
(Pp) eter (Peter): waar
. * abc. * (pqabcqp): waar
^ (^ d). * (abc123): waar
(a-zA-Z) (a-zA-Z) (a-zA-Z) (aQz): waar
(a-zA-Z) (a-zA-Z) (a-zA-Z), a10zfalse
D *, abcde: waar
^ This $, This is Java: false
^ This $, This: false
^ This $, Is This Java?: False
In het bovenstaande programma hebben we verschillende regexes voorzien die overeenkomen met de invoertekenreeks. Lezers wordt geadviseerd om de opmerkingen in het programma voor elke regex te lezen om het concept beter te begrijpen.
Regex Logisch of (|) Operator
We kunnen de logische of (| operator) gebruiken in regex die ons de keuze geeft om ofwel operand van | te selecteren operator. We kunnen deze operator in een regex gebruiken om een teken of string te kiezen. Bijvoorbeeld, als we beide woorden, ‘test’ en ‘Test’, willen matchen, dan zullen we deze woorden in logisch of operator opnemen als Test | test.
Laten we het volgende voorbeeld bekijken om deze operator te begrijpen.
Uitgang:
Tekst 'Test' gevonden op 9 tot 13.
Tekst 'test' gevonden op 8 tot 12.
In dit programma hebben we de regex “(Test | test)” voorzien. Dan geven we eerst de invoerstring als 'Software Testing Help' en matchen we het patroon. We zien dat de match is gevonden en de positie wordt afgedrukt.
Vervolgens geven we de invoerstring 'SoftwaretestingHelp'. Dit keer wordt ook de match gevonden. Dit komt doordat de regex de operator or heeft gebruikt en dus het patroon aan weerszijden van | operator komt overeen met de string.
E-mailvalidatie met Regex
We kunnen ook de e-mail-id (adres) valideren met regex met behulp van de methode java.util.regex.Pattern.matches (). Het komt overeen met het opgegeven e-mail-ID met de regex en retourneert true als het e-mailadres geldig is.
Het volgende programma demonstreert de validatie van e-mail met behulp van regex.
Uitgang:
De e-mail-ID is: ssthva@gmail.com
E-mailadres geldig? waar
De e-mail-ID is: @ sth @ gmail.com
E-mailadres geldig? false
Zoals we kunnen zien in de bovenstaande uitvoer, is het eerste e-mail-ID geldig. De tweede id begint direct met @, en daarom valideert regex deze niet. Daarom is het een ongeldig ID.
gratis tijdkloksoftware voor kleine bedrijven
Veel Gestelde Vragen
V # 1) Wat zit er in een reguliere expressie?
Antwoord: NAAR Reguliere expressie gewoonlijk regex genoemd is een patroon of een reeks tekens (normale of speciale of meta-tekens) die wordt gebruikt om een invoertekenreeks te valideren.
Vraag 2) Wat is de betekenis van de Matcher-klasse voor een reguliere expressie in Java?
Antwoord: De matcher-klasse (java.util.regex.Matcher) fungeert als een regex-engine. Het voert de afstemmingsbewerkingen uit door het patroon te interpreteren.
V # 3) Wat is het patroon in Java?
Antwoord: Het pakket java.util.regex biedt een Pattern-klasse die wordt gebruikt om een regex te compileren tot een patroon dat de standaardrepresentatie is voor regex. Dit patroon wordt vervolgens gebruikt om strings te valideren door het te matchen met het patroon.
V # 4) Wat is B in een reguliere expressie?
Antwoord: De B in regex wordt aangeduid als b en is een ankerteken dat wordt gebruikt om overeen te komen met een positie die woordgrens wordt genoemd. Het begin van de regel wordt aangegeven met een caret (^) en het einde van de regel wordt aangegeven met een dollarteken ($).
V # 5) Is patroondraad-veilige Java?
Antwoord: Ja. Instanties van de klasse Pattern zijn onveranderlijk en veilig voor gebruik door meerdere gelijktijdige threads. Maar de exemplaren van de matcher-klasse zijn niet thread-safe.
Gevolgtrekking
In deze tutorial hebben we reguliere expressies in Java besproken. De reguliere expressie die ook bekend staat als ‘regex’ wordt gebruikt om de invoertekenreeks in Java te valideren. Java biedt de ‘ java.util.regex ' pakket dat klassen zoals Pattern, Matcher, etc. biedt die helpen bij het definiëren en matchen van het patroon met de invoertekenreeks.
We hebben ook verschillende speciale tekenklassen en metatekens gezien die we kunnen gebruiken in de regex die steno-codes geven voor het matchen van patronen. We hebben ook e-mailvalidatie onderzocht met behulp van regex.
Ontdek hier de eenvoudige Java-trainingsserie.