c regex tutorial what is c regular expression
Tento výukový program C # Regex vysvětluje, co je regulární výraz v C #, jeho syntaxe, metody třídy Regex a jak používat tyto metody pomocí příkladů:
Regulární výraz v C # se používá pro shodu konkrétního znakového vzoru. Regulární výrazy se používají vždy, když uživatel potřebuje najít nějaký opakující se vzor nebo provést ověření dat nebo dokonce pro kontrolu formátování dat.
RegEx se používá k nalezení, zda řetězec obsahuje nebo odpovídá danému znakovému vzoru. Regulární výraz je primárně posloupnost znaků, která označuje vzor.
Vzorem může být cokoli, od čísel, znaků nebo kombinace všech. Regex je široce používán pro validaci. Analýza nebo shoda řetězců, například, zjištění, zda řetězec odpovídá formátu měny, telefonního čísla nebo formátu data.
=> Přečtěte si sérii tréninků Easy C #.
jaký je nejlepší bezplatný firewall pro Windows 10
Co se naučíte:
Regex třída v C #
Třída Regex se v C # používá k provádění operací regulárního výrazu. Obsahuje několik různých metod, které lze použít k provedení různých operací souvisejících s regulárním výrazem.
Lze jej použít k analýze velkého textu k vyhledání konkrétní posloupnosti znaků pomocí metod, které lze použít k provedení shody, k nahrazení nebo k rozdělení posloupnosti znaků.
Třída regex je přítomna uvnitř oboru názvů; System.Text.RegularExpression. Třída přijímá jako parametr řetězec ve formě posloupnosti znaků.
Metody C # Regex
IsMatch
Nejjednodušší a nejužitečnější metodou ve třídě Regex je metoda IsMatch. Tato metoda má různá přetížení pro provádění párování znaků na základě různých parametrů.
Nejjednodušší je IsMatch (text řetězce) , tato metoda umožňuje uživateli poskytnout posloupnost znaků pro shodu řetězce.
Druhé přetížení IsMatch (text řetězce, int pozice). Tato metoda vrací logickou hodnotu a přijímá dva parametry (řetězec a celé číslo). Řetězcový text zadaný v parametru je v podstatě konstruktor regulárního výrazu, který bude odpovídat posloupnosti znaků od počáteční polohy určené parametrem integer.
Tato metoda se tedy pokusí porovnat vstup řetězce s pozicí poskytovanou celočíselným parametrem v daném řetězci.
Třetí přetížení, IsMatch (text řetězce, vzor řetězce) přijímá dva parametry a vrací logickou hodnotu. První parametr je text, ve kterém uživatel potřebuje najít vzor, a další parametr poskytuje vzor, který uživatel hledá v daném textu.
Doporučené čtení = >> Porovnávání vzorů v MySQL
Nahradit (String text, String replacementText)
Metoda replace přijímá dva parametry a vrací hodnotu řetězce. První parametr je posloupnost znaků nebo regex, který chcete použít pro shodu, a druhý je nahrazení regexu.
Metoda funguje tak, že najde shodu daného textu a poté ji nahradí nahrazujícím textem poskytnutým uživatelem. Podpis metody je veřejný řetězec Nahradit (text řetězce, nahrazení řetězce Text)
Veřejný řetězec () Rozdělit (text řetězce)
Metoda split z třídy regex přijímá vstup řetězce jako parametr a vrací pole obsahující podřetězce. Parametr předaný v metodě je řetězec, který je třeba rozdělit.
Metoda najde odpovídající vstupní vzor v řetězci a jakmile identifikuje jakýkoli odpovídající vzor, rozdělí řetězec na tomto místě na menší podřetězec, přičemž každý odpovídající vzor je bodem zlomu. Metoda poté vrátí pole obsahující všechny podřetězce.
Využití metod Regex C #
Pojďme se podívat na využití těchto metod napsáním jednoduchého programu.
public static void Main(string() args) { string patternText = 'Hello'; Regex reg = new Regex(patternText); //IsMatch(string input) Console.WriteLine(reg.IsMatch('Hello World')); //IsMatch(string input, int index) Console.WriteLine(reg.IsMatch('Hello', 0)); //IsMatch(string input, string pattern) Console.WriteLine(Regex.IsMatch('Hello World', patternText)); //Replace(string input, string replacement) Console.WriteLine(reg.Replace('Hello World', 'Replace')); //Split(string input, string pattern) string() arr = Regex.Split('Hello_World_Today', '_'); foreach(string subStr in arr) { Console.WriteLine('{0}', subStr); } }
Výstup výše uvedeného programu
Skutečný
Skutečný
Skutečný
Nahraďte svět
Ahoj
Svět
Dnes
Vysvětlení výše uvedeného kódu:
Na začátku programu jsme vytvořili objekt a pro vzor, který použijeme pro shodu kódu v následném zadání řetězce, jsme použili formátování textu, abychom na začátku udrželi jednoduchost, ale pokud vám to vyhovuje, můžete začněte používat vzory regulárních výrazů. (V tomto tutoriálu budeme podrobně diskutovat o vzorci regulárního výrazu, jak postupujeme vpřed)
Poté použijeme řetězec shody k zadání faktoru, který jsme deklarovali jako zadaný objekt se vstupním řetězcem, a pokud se shoduje, vrátí se a vrátí hodnotu false.
Další metodou, kterou jsme použili, je IsMethod (vstup řetězce, int index). Tato metoda přijímá dva parametry a zde poskytujeme vstupní řetězec a index, odkud má zápas začít. Například, tady jsme chtěli začít porovnávat od začátku vstupního řetězce.
Pak jsme demonstrovali použití IsMatch (řetězec, řetězcový vzor). Zde jsme zadali vstupní řetězec, pak jsme chtěli zjistit, že pokud je ve vstupu text vzoru, nebo ne. Pokud je jeho přítomnost, vrátí hodnotu true (jako v našem případě), jinak vrátí hodnotu false.
Další metoda, o které jsme diskutovali, je nahrazena. Tato metoda je docela užitečná v programech, kde chcete provést změny vstupních dat nebo změnit formát existujících dat.
Zde poskytujeme dva parametry, první je vstupní řetězec a druhý je řetězec, kterým lze nahradit předchozí řetězec. Tato metoda také používá vzor definovaný v regex objektu, který jsme definovali dříve.
Další důležitou metodou, kterou jsme použili, je rozdělení. Tato metoda se používá k rozdělení daného řetězce na základě některých opakujících se vzorů. Zde jsme poskytli řetězec „Hello_World_Today“.
Řekněme, že chceme odstranit podtržítko z daného řetězce a získat podřetězce. Za tímto účelem zadáme vstupní parametr a poté dáme vzor, který musíme použít jako bod rozdělení. Metoda vrací pole a k načtení všech řetězců můžeme použít jednoduchou smyčku jako foreach.
Syntaxe regulárních výrazů
Existuje několik různých syntaxí, jako jsou speciální znaky, kvantifikátory, třídy znaků atd., Které lze použít k porovnání určitého vzoru z daného vstupu.
V této části tutoriálu se ponoříme hluboko do syntaxe nabízené regexem a pokusíme se pomocí nich vyřešit některé reálné scénáře. Než budeme pokračovat, ujistěte se, že jste získali základní představu o regexu a různých metodách dostupných ve třídě regexu.
Speciální znaky
Speciální znaky v regulárním výrazu se používají k přiřazení několika různých významů vzoru. Nyní se podíváme na některé z často používaných speciálních znaků a jejich význam v Regex.3
Speciální znaky | Význam |
---|---|
w a W. | Malá písmena „w“ se používají k porovnávání alfanumerických znaků a znaků podtržítka a velká písmena „W“ se používají k porovnávání neslovních znaků. |
^ | Toto je jedna z nejpoužívanějších syntaxí. Označuje začátek, slovo nebo vzor poté, co se začne shodovat od začátku vstupního textu. |
$ | Toto znaménko se používá pro shodu slov od konce řetězce. Slova / vzory označené před tímto symbolem se budou shodovat se slovy přítomnými na konci řetězce. |
. (tečka) | Tečka se používá k přiřazení jednoho znaku v daném řetězci, který se vyskytne jednou. |
n | Používá se pro nový řádek. |
d a D | Malá písmena „d“ se používají k porovnání číslic a velká písmena „D“ se používají k porovnávání jiných než číslic. |
s a S | Malá písmena „s“ se používají k porovnávání bílých mezer a velká písmena „S“ se používají k porovnávání jiných než bílých mezer. |
Syntaxe kvantifikátoru
Syntaxe kvantifikátoru se používá k počítání nebo kvantifikaci kritérií shody. Například, pokud chcete zkontrolovat, zda určitý řetězec obsahuje abecedu jednou nebo vícekrát. Podívejme se na některé z běžně používaných kvantifikátorů v regulárním výrazu.
Syntaxe kvantifikátoru | Význam |
---|---|
* | Tento symbol se používá k porovnání předchozího znaku. |
+ | Tento symbol se používá k přiřazení jednoho nebo více znaků v řadě. |
{n} | Numerická číslice uvnitř složených závorek se používá k porovnání počtu předcházejícího znaku definovaného číselnými uvnitř složených závorek. |
{n,} | Číslice uvnitř složených závorek a tento symbol se používají k zajištění toho, aby odpovídala alespoň n (tj. Číselná hodnota uvnitř složených závorek). |
{n, m} | Tento symbol se používá pro shodu od předchozího znaku od n počtu opakování po m počet opakování. |
? | Tento symbol umožňuje, aby se předchozí znaky shodovaly jako volitelné. |
Třída znaků
Třída znaků je také známá jako znakové sady a používá se k tomu, aby vyhledávací modul regex vyhledal jednu shodu z několika znaků. Třída znaků bude odpovídat pouze jednomu znaku a na pořadí znaků uzavřených uvnitř znakové sady nezáleží.
Třída znaků | Význam |
---|---|
( rozsah ) | Symbol hranaté závorky se používá pro shodu rozsahu znaků. Například jej můžeme použít k definování libovolného znaku v rozsahu od abecedy „a“ po „z“ uzavřením rozsahu uvnitř závorky jako (a-z) Nebo můžeme také odpovídat číselným „1“ až „9“ označením (1-9) |
(^ rozsah) | To označuje negaci třídy znaků. Používá se k porovnání čehokoli, nikoli v rozsahu označeném uvnitř závorky. |
Slouží k přiřazení speciálních znaků, které mohou mít své vlastní symboly regulárního výrazu. Lomítko se používá k porovnání zvláštních znaků v jejich doslovném tvaru. |
Seskupení
K seskupení části regulárního výrazu lze použít kulaté závorky nebo závorky. To umožňuje uživateli buď přidat kvantifikátor s výrazem.
Seskupení | Význam |
---|---|
(skupinový výraz) | Kulaté závorky se používají ke seskupení výrazu. |
| | | operátor se používá uvnitř kulaté závorky pro použití alternativy například (a | b). |
Příklady regulárních výrazů v C #
V předchozí části jsme se dozvěděli o symbolech regulárních výrazů, v této části se podrobně podíváme na použití různých symbolů v regulárním výrazu a na kombinaci, ve které je lze použít k porovnání různých výrazů.
V tomto kurzu probereme některé z nejčastěji se vyskytujících scénářů reálného života, kterým můžete čelit jako vývojář při práci na nějaké aplikaci nebo v jednoduchém programu pro získání vstupu uživatele.
Příklad regulárního výrazu se scénáři z reálného života
Naučme se více o regulárních výrazech pomocí několika příkladů v reálném čase.
Scénář 1: Ověřte, zda je vstupní řetězec složen z 6místných znaků abecedy bez rozlišení malých a velkých písmen.
Nejběžnějším scénářem pro regulární výraz je nalezení a shoda daného slova. Například, řekněme, že chci od uživatele náhodný abecední řetězec a tento vstup by měl mít přesně 6 číslic.
K ověření, že můžeme použít jednoduchý regulární výraz. Napíšeme program, abychom lépe porozuměli psaní a používání regulárních výrazů.
public static void Main(string() args) { string patternText = @'^(a-zA-Z){6}$'; Regex reg = new Regex(patternText); //When pattern matches Console.WriteLine(reg.IsMatch('Helios')); //When pattern doesnt match Console.WriteLine(reg.IsMatch('Helo')); }
Výstup
Skutečný
Nepravdivé
Vysvětlení
V tomto příkladu se pokoušíme ověřit vstupní řetězec a zkontrolovat, zda obsahuje šestimístné abecední znaky. Znaky mohou být jak malými, tak velkými písmeny, takže to musíme také zohlednit.
Zde jsme tedy definovali vzor regulárního výrazu v proměnné „patternText“ a poté jej předali do objektu regulárního výrazu. Nyní jsou další řádky kódu docela jednoduché, k porovnání regulárního výrazu a vstupního řetězce jsme použili metodu IsMatch.
Pojďme se nyní podívat na regulární výraz, který jsme vymysleli. Výraz (^ (a-zA-Z) {6} $) je složen ze 4 různých částí. „^“, „(A-zA-Z)“, „{6}“ a „$“. Druhá část označuje odpovídající znaky, které se používají k porovnávání výrazů, „a-z“ pro malá písmena a „A-Z“ pro velká písmena.
Znak první části „^“ zajišťuje, že řetězec začíná vzorem definovaným ve druhé části, tj. Malými a velkými písmeny.
Kudrnaté závorky ve třetí části určují počet znaků v řetězci, které lze identifikovat podle definovaného vzoru, tj. 6 v tomto případě a symbol „$“ zajistí, že končí vzorem definovaným v druhé části.
^ (a-zA-Z) {6} $
Scénář 2: Použijte regulární výraz k ověření, že slovo, které začíná „Super“, a poté má prázdné znaky, tj. K ověření, zda je na začátku věty slovo „Super“.
Předpokládejme, že čteme nějaké vstupy uživatelů a musíme se ujistit, že uživatel vždy začíná svou větu konkrétním slovem, číslem nebo abecedou. Toho lze snadno dosáhnout pomocí jednoduchého regulárního výrazu.
Podívejme se na ukázkový program a poté podrobně probereme, jak tento výraz napsat.
public static void Main(string() args) { string patternText = @'^Supers'; Regex reg = new Regex(patternText); //When pattern matches Console.WriteLine(reg.IsMatch('Super man')); //When pattern doesnt match Console.WriteLine(reg.IsMatch('Superhero')); }
Výstup
Skutečný
Nepravdivé
Vysvětlení
I v tomto příkladu jsme použili podobné nastavení kódu jako v prvním. Vzor regulárního výrazu v tomto scénáři vyžaduje shodu s kombinací slov nebo vět, které začínají slovem „Super“.
^ Super
Jelikož se tedy chceme shodovat od začátku slovní řady, začneme tím, že umístíme symbol „^“, potom dáme vzor, který chceme porovnat, v tomto případě „Super“. Nyní vzor, který jsme vytvořili „^ Super“, se může shodovat se všemi hodnotami super, dokonce i nadčlověka nebo nadpřirozeného, ale nechceme jen slovo „Super“.
To znamená, že za slovem by měla být mezera, která by označila konec slova a začátek jiného slova. K tomu přidáme do vzoru symbol „ s“ a tím vytvoříme náš konečný vzor jako
^ Super
Scénář 3: Použijte regulární výraz k vyhledání platných názvů souborů s příponou typu obrazového souboru.
Dalším důležitým scénářem v reálném čase, kterému vývojáři často čelí, je ověřování typů souborů. Řekněme, že v uživatelském rozhraní máme tlačítko pro nahrávání, které může přijímat pouze přípony typů obrazových souborů.
Musíme ověřit nahraný soubor uživatele a informovat ho v případě, že nahrál nesprávný formát souboru. Toho lze snadno dosáhnout pomocí regulárního výrazu.
Níže je uveden jednoduchý program, který to zkontroluje.
public static void Main(string() args) jpeg
Výstup
Skutečný
Skutečný
Skutečný
Nepravdivé
Nepravdivé
Vysvětlení
Zde musíme najít shodu názvu souboru. Platný název souboru se skládá ze tří částí ( název souboru +. + přípona souboru ). Musíme vytvořit regulární výraz, který odpovídá všem třem částem. Začněme porovnáním první části, tj. Názvu souboru. Název souboru může obsahovat alfanumerické a speciální znaky.
Jak již bylo řečeno, symbol pro označení „ w“. Název souboru může mít také jeden nebo více znaků, takže bude používán symbol „+“. Zkombinujte je a dostaneme symbol pro první část.
(w+)
Držák to oddělil po částech. Další část je symbol tečky. Protože symbol tečky má svůj význam v regulárním výrazu, použijeme před ním zpětné lomítko, abychom mu dali doslovný význam. Kombinujte oba a máme první dvě části regexu pokryty.
(w+).
Nyní můžeme pro třetí a poslední část přímo definovat požadované přípony souborů oddělené „|“ NEBO symbol. To lze poté oddělit uzavřením uvnitř kruhového držáku. Znak „$“ na konci zajišťuje, že definované přípony jsou na konci řetězce. Pojďme je nyní zkombinovat a získat konečný regulární výraz.
(w+).(jpg|png|jpeg|gif)$
Nyní, pokud to použijeme v programu, vidíme, že odpovídá správnému formátu a vrátí true, ale s neplatnými formáty vrátí false.
Scénář 4: Použijte regulární výraz k ověření formátu adresy webu
Předpokládejme, že máme webový formulář, který přijímá webovou adresu nebo adresu domény. Chceme, aby uživatel při vyplňování formuláře zadal správnou adresu webu / domény. Pro určení, zda uživatel zadal správnou webovou adresu, může být regulární výraz docela užitečný.
public static void Main(string() args) { string patternText = @'^www.(a-zA-Z0-9){3,20}.(com|in|org|co.in|net|dev)$'; Regex reg = new Regex(patternText); //When pattern matches Console.WriteLine(reg.IsMatch('www.selenium.dev')); //When pattern doesnt match Console.WriteLine(reg.IsMatch('ww.alsjk9874561230.movie.dont')); }
Výstup
Skutečný
Nepravdivé
Vysvětlení
Zde chceme pomocí regulárního výrazu porovnat platný název domény. Platný název domény začíná zkratkou „www“, za kterou následuje tečka (.), Poté název webu, tečka (.) A na konci přípona domény.
Podobně jako v předchozím scénáři se tedy pokusíme spojit to část po části. Nejprve začneme porovnáním výrazu „www“. Část. Začneme tedy počátečním symbolem, poté jako „www.“ Je to něco, co je opravené, takže k porovnání používáme počáteční symbol následovaný přesnými slovy.
“^www.”
Pak začneme pracovat na druhé části. Druhou částí webové adresy může být libovolný alfanumerický název. Zde tedy použijeme hranaté závorky přítomné ve třídě znaků k definování rozsahu, který je třeba porovnat. Po přidání druhé části nám druhá část dá.
“^www.(a-zA-Z0-9){3,20}”
Zde jsme také přidali složené závorky k definování minimální a maximální délky znaků pro název webu. Dali jsme minimálně 3 a maximálně 20. Můžete zadat libovolnou minimální nebo maximální délku, kterou chcete.
Nyní, když jsme pokryli první a druhou část webové adresy, nám zbývá jen poslední část, tj. Přípona domény. Je to docela podobné tomu, co jsme udělali v posledním scénáři. Přímo se spojíme s příponami domény pomocí OR a uzavřeme každé platné rozšíření domény do kruhové závorky.
Pokud tedy přidáme všechny tyto dohromady, budeme mít úplný regulární výraz, který bude odpovídat jakékoli platné webové adrese.
www.(a-zA-Z0-9){3,20}.(com|in|org|co.in|net|dev)$
Scénář 5: Použijte regulární výraz k ověření formátu e-mailu
Předpokládejme, že na naší webové stránce máme přihlašovací formulář, který uživatele žádá o zadání e-mailové adresy. Ze zřejmých důvodů nebudeme chtít, aby náš formulář pokračoval s neplatnými e-mailovými adresami. K ověření, zda je e-mailová adresa zadaná uživatelem správná, můžeme použít regulární výraz.
Níže je uveden jednoduchý program pro ověření e-mailové adresy.
public static void Main(string() args) { string patternText = @'^(a-zA-Z0-9._-){5,25}.@.(a-z){2,12}.(com|org|co.in|net)'; Regex reg = new Regex(patternText); //When pattern matches Console.WriteLine(reg.IsMatch('software_test123@gmail.com')); Console.WriteLine(reg.IsMatch('Special.Char@yahoo.co.in')); //When pattern doesnt match Console.WriteLine(reg.IsMatch('ww.alsjk9874561230.mo@vie.dont')); }
Výstup
Skutečný
Skutečný
Nepravdivé
Vysvětlení
zdarma blokování automaticky otevíraných oken pro chrom
Platná e-mailová adresa obsahuje abecedy, číslice a některé speciální znaky, jako jsou tečka (.), Pomlčka (-) a podtržítka (_), za nimiž následuje symbol „@“, za nímž následuje název domény a přípona domény.
Můžeme tedy rozdělit e-mailovou adresu na čtyři části, tj. E-mailový identifikátor, symbol „@“, název domény a poslední je přípona domény.
Začněme tím, že k první části napíšeme regulární výraz. Může být alfanumerický s některými speciálními znaky. Předpokládejme, že máme velikost výrazu v rozmezí od 5 do 25 znaků. Podobně, jak jsme to napsali dříve (v e-mailovém scénáři), můžeme přijít s následujícím výrazem.
^(a-zA-Z0-9._-){5,25}
Nyní přejdeme k druhé části. Je to poměrně snadné, protože se musíme shodovat pouze s jedním symbolem, tj. „@“. Přidání k výše uvedenému výrazu nám dává.
^(a-zA-Z0-9._-){5,25}.@
Přechod na třetí část, tj. Název domény, bude vždy tvořena řadou malých abecedních znaků. Pokud chcete, můžete také zahrnout číselné nebo velká písmena, ale pro tento scénář použijeme malá písmena.
Pokud přidáme výraz pro malá písmena s délkou od 2 do 12 znaků, budeme mít následující výraz.
^(a-zA-Z0-9._-){5,25}.@.(a-z){2,12}
Nyní nám zbývá výraz pro příponu domény, podobně jako ve čtvrtém scénáři, budeme zpracovávat některá konkrétní rozšíření domény. Pokud chcete, můžete přidat další z nich tak, že je uzavřete do kruhové závorky a oddělíte je znakem „|“ symbol.
Konsolidace tohoto výrazu s předchozím výrazem nám poskytne naši konečnou hodnotu výrazu pro ověření e-mailu.
^(a-zA-Z0-9._-){5,25}.@.(a-z){2,12}.(com|org|co.in|net)
Závěr
V tomto kurzu jsme se naučili, co je regulární výraz, spolu se syntaxí / symboly, které se používají k označení, sestavení regulárního výrazu. Regulární výraz umožňuje uživateli přiřadit řetězec k danému vzoru.
To je docela užitečné v situacích, které vyžadují rychlé ověření vstupu, jako když uživatel zadá svou e-mailovou adresu nebo telefonní číslo, lze k rychlému ověření formátu použít regex a informovat uživatele o problému, pokud uživatel zadal nesprávný formát.
Také jsme se naučili řešit různé scénáře, které lze použít pro různé aplikace. Podívali jsme se na postup krok za krokem, abychom mohli psát výrazy pro odpovídající slova, abecedy, adresy webových stránek, ID e-mailů a dokonce i typy a přípony souborů.
Tyto scénáře jsou velmi užitečné při ověřování uživatelských vstupů v reálném čase bez psaní mnoha řádků kódu, a tím pomáhají šetřit čas a snižovat složitost. Tyto příklady byly použity k tomu, aby uživatele vedly k vytvoření vlastní sady regulárních výrazů, a tak jim pomohly při zpracování několika dalších různých scénářů.
Regex může být jednoduchý, jako použití abecedy nebo číslic, aby se shodovaly s danou řadou znaků nebo komplexu, pomocí kombinace speciálních znaků, kvantifikátorů, tříd znaků atd. K ověření komplexních formátů nebo k hledání konkrétního vzoru v sérii znaků.
Stručně řečeno, regulární výraz je pro programátora docela mocný nástroj a pomáhá snižovat množství kódu, který je vyžadován k dosažení shody dat nebo ověřovací úlohy.
=> Podívejte se na VŠECHNY výukové programy C # zde.
Doporučené čtení
- C # String Tutorial - Metody řetězců s příklady kódu
- Generátor náhodných čísel C # a generátor náhodných řetězců C # s příklady kódu
- C ++ regex Tutorial: Regulární výrazy v C ++ s příklady
- Regulární výraz MongoDB $ regex s příkladem
- Výukový program Java Regex s příklady regulárních výrazů
- Jak používat regulární výrazy Unixu
- Používání postprocesoru v JMeteru (extraktor regulárních výrazů)
- Výukový program Java String | Metody řetězců Java s příklady