Práce s regulárními výrazy v Javě

Obsah
V dnešních informačních systémech je normální vidět vyhledávací funkce, tyto funkce je třeba pokaždé zpracovat vzory mnoha dalších komplexů. Aby bylo možné zvážit zejména každý případ, trvalo by to několik tisíc let, a proto byly vyvinuty mechanismy, které umožňují vytvořit formulovanou reprezentaci vyhledávání.
Tyto vzorce najdete v regulární výrazy, které nám umožňují vytvořit vzorce pro hodnocení textových řetězců a vrátit kladnou nebo zápornou hodnotu, pokud uvedený řetězec odpovídá vyjádřenému vzorci nebo ne.
v Jáva Regulární výrazy můžeme implementovat jednoduchým způsobem, ale to vyžaduje poměrně rozsáhlou studii vývojáře, aby se mohl naučit různé prvky, které má.
Způsob, jakým můžeme vyjádřit vzorce, pomocí kterých můžeme otestovat naše vzory s konkrétní konstrukcí kódu, tomu budeme říkat syntaxe regulárních výrazů.
Co nám syntaxe umožňuje?Syntaxe nám umožňuje vytvořit vzory podle typu znak, množství, kombinace znaku a veličin, začněte konkrétním prvkem, nastavte výraz pro střed vzorce a konec. Díky tomu můžeme identifikovat velmi specifické vzory, které mohou být v našem programu potřeba, nebo snad vhodnějším způsobem filtrovat vyhledávání v textu nebo databázi.
Podívejme se níže na malý seznam prvků nejpoužívanějších v regulárních výrazech s Jáva„Existuje mnoho dalších prvků, než jsou prvky ukázané v tomto tutoriálu, a proto se pro posílení znalostí doporučuje provést vlastní průzkum:
Začátek řádku\^ Tímto prvkem pokračujeme k označení Jáva který začíná řádek v regulárním výrazu.
Konec čáry$ Tímto symbolem označujeme, že jsme dokončili řádek.
Seznam postav[] S hranatými závorkami označujeme regulárnímu výrazu, že by měl hledat jakýkoli seznam uvnitř.
Vyloučit[\^] Umožňuje nám vybrat libovolný znak, který není uveden.
Kvantifikátor{j, k} Najděte, co je uvnitř j kolikrát je uvedeno k; {j,} v tomto druhém případě, co je in j jednou nebo vícekrát; Konečně {j} znamená, že by se mělo objevit, co je in j jen jednou.
Slovní znaky\ w Najděte postavy, které patří slovo, ale pokud použijeme \ W dělá naopak vyhledá znaky, které nepatří.
Číslice\ d Umožňuje nám vytvářet shody pouze s číslicemi a pokud je používáme \ D spojíme cokoli, co není číselný ani číselný znak.
Mezery\ s Umožňuje nám porovnat prázdná místa, jako jsou karty, mezerník, ale pokud použijeme \ S dělá opak, odpovídá všemu, co není prázdné místo.
Jak vidíme u těchto několika prvků, můžeme vytvářet různé kombinace, pomocí kterých můžeme získat relativně složité vzory.
Pokud chceme jeden vyzkoušet pravidelná fráze Před sestavením programu můžeme použít stránku rubular.com, kde můžeme v reálném čase vyhodnotit vzory.

ZVĚTŠIT

Provedeme jednoduchý příklad, kde budeme testovat a regulární výraz pro ověření e -mailu, použijeme následující:
[_ a-z0-9-] + (\. [_ a-z0-9-] +) * @ [a-z0-9-] + (\. [a-z0-9-] +) * (\. [az] {2,3}) $

Nejprve musíme zadat regulární výraz do prvního pole formuláře stránky rubular.com pak v poli volal váš testovací řetězec je místo, kde budeme testovat různé e -maily, abychom ověřili, že regex funguje, podívejme se, jak se validátor chová, když zadáme neplatný e -mail:

ZVĚTŠIT

Jak vidíme, v našem příkladu e -mailu chybí tečka, takže je neplatný a nikoli nevytváří žádnou shodu S regulárním výrazem jej opravíme vložením chybějícího bodu a validátor automaticky vygeneruje pozitivní odpověď, což nám umožní vidět, že náš regulární výraz funguje bez problémů.

ZVĚTŠIT

Jak vidíme, toto je velmi užitečný zdroj, když se učíme používat regulární výrazy nejen v Jáva pokud ne v jakémkoli jazyce.
Jakmile víme, co každý ze základních prvků syntaxe dělá, musíme se nyní naučit, jak můžeme vytvořit a hledat vzor v rámci JávaDíky tomu vidíme, jaké metody, třídy a balíčky vstupují do hry, když používáme regulární výrazy.
První věc, kterou bychom měli vědět, je, že všechny tyto nástroje jsou v balíčku java.util.regex„Abychom mohli tyto příklady provést, musíme tento balíček zahrnout na začátek našich tříd.
Jakmile je výše provedeno, můžeme testovat vzorek následujícím způsobem:
 if (ourString.matches (ourExpression)) {// Pokud se zde shoduje, spustíme kód} 

Vidíme, že tuto metodu používáme zápasy (), toto vyhodnotí řetězec znaků podle vzoru regexu a vrátí se skutečný nebo Nepravdivé, v případě, že řetězec znaků odpovídá vzoru nebo ne.
Tento typ použití je vhodný pro malé ověřování, ale pokud budeme používat opakované ověřování, to znamená, že se v našem programu objeví mnohokrát, je nejlepší vytvořit malou rutinu nebo třídu, která nám umožní vyhodnotit řetězec parametrické formy, tj. rutiny nebo metody, která nám umožňuje zadat řetězec a vrátit hodnotu true nebo false, již porovnávající s konkrétním vzorem.
V následujícím programu budeme testovat malý vzorec a vyhodnotíme jej podle několika řetězců a program nám řekne, který z nich dělá. zápas, to znamená, který z nich odpovídá a který ne, podívejme se na kód a pak uvidíme, jak to funguje:
 import java.util.regex. *; public class TestPatterns {public static void main (String [] argv) {String pattern = "Q [u] \ d + \."; String [] input = {"QA777. Je identifikátor našeho produktu.", "Quack, Quack, Quack!" }; Pattern p = Pattern.compile (vzor); for (String in: input) {boolean found = p.matcher (in) .lookingAt (); System.out.println ("" " + vzor +" '" + (nalezeno?" Odpovídá' ":" neodpovídá '") + v +"' "); }}} 

Zde vidíme, jak první věc, kterou uděláme, je import balíčku uvedeného na začátku této části, abychom tímto způsobem získali funkce hledání pomocí regulárních výrazů. Poté vytvoříme vzor, ​​který použijeme, je náš program, v tomto případě je to vzor, ​​který odpovídá písmenu „Otázka„Pak musí mít jakýkoli znak kromě písmene“nebo"A musí to skončit tečkou." Poté kompilujeme náš vzorec pomocí metody kompilovat a můžeme jej použít k vytváření zápasů. Nakonec, pokud se vzor shoduje, vytiskne se slovem zápas jinak tiskneme neshoduje se.
Podívejme se na následujícím obrázku, jak to vypadá, když spustíme program:

ZVĚTŠIT

Poté si všimneme, jak bylo vysvětleno, prvního řetězce nebo řetězce, pokud se shoduje, ale druhý ne, a pro další informaci umístíme vzor, ​​na kterém by mělo být provedeno srovnání.
Nyní provedeme pokročilejší příklad, určíme, která část našich řetězců odpovídá, což je velmi užitečné při provádění textového vyhledávání, protože tímto způsobem můžeme zvýraznit shody toho, co uživatel zadá.
K tomu použijeme stejný základ našeho předchozího programu s některými úpravami, podívejme se na kód a poté na jeho vysvětlení:
 import java.util.regex. *; public class Match {public static void main (String [] argv) {String pattern = "Q [u] \ d + \."; Pattern r = Pattern.compile (vzor); Řetězcový text = "ID je: QW990. Konec testu!"; Matcher m = r.matcher (text); if (m.find ()) {System.out.println (vzor + "odpovídá \" " + m.group (0) +" \ "uvnitř \" " + text +" \ ""); } else {System.out.println ("Žádné shody"); }}} 

Opět vidíme, jak spustíme náš program včetně balíčku java.util.regex. *. Poté použijeme stejný vzor z předchozího programu a zkompilováme ho metodou kompilovat„Nyní přichází zajímavá věc, použili jsme tuto metodu zápasník () k vyhledání shody a poté pomocí metody najít () a způsob skupina () můžeme extrahovat přesně to, co odpovídá, nakonec vytvoříme odpovídající sítotisky. Podívejme se, jak náš program nyní vypadá:

ZVĚTŠIT

Vidíme tedy, jak jsme byli schopni izolovat slovo, které skutečně odpovídá vzoru, který jsme uspořádali pro srovnání pravidelná fráze.
Jedna z nejpoužívanějších aplikací je na formuláře, kde můžeme provést ověření e -maily, telefonní čísla, kreditní karty, hesla, IP adresy, uživatelská jména, PSČ a dokonce ověřit, že všechny naše značky v našem dokumentu HTML jsou správně uzavřeny, což nám dává možnost dosáhnout vyšší bezpečnosti při zpracování textu zadaného uživateli.
Ale nejen při ověřování v polích formuláře, jak jsme si všimli v našem posledním příkladu, můžeme také udělat dlouhé textové vyhledávání Podle konkrétního vzoru s ním můžeme systematicky vyhledávat ve velmi složitých textových dokumentech a ušetřit tak spoustu času, jednoduše napsáním malého programu.
Tím tento tutoriál dokončujeme, naučili jsme se, jak můžeme přejít od používání různých prvků k vyjádření situací v rámci našich vzorů k efektivnímu porovnávání textu nebo postav, které chceme vyhodnotit, a to vše díky regulární výrazy. Tato hodnocení jsou poměrně rychlá díky optimalizacím, které jazyk provádí v metodách, které nám nabízí, takže jsou velmi vhodné pro konstrukci rozhraní, kde potřebujeme hledat a ověřovat text, který uživatel zadá.Líbil se vám tento návod a pomohl mu?Autora můžete odměnit stisknutím tohoto tlačítka, čímž mu dáte kladný bod
wave wave wave wave wave