c regex tutorial what is c regular expression
Този урок за C # Regex обяснява какво е регулярен израз в C #, неговия синтаксис, методи на клас Regex и как да използвате тези методи с помощта на примери:
Регулярният израз в C # се използва за съвпадение на определен модел символи. Регулярните изрази се използват винаги, когато потребителят трябва да намери някакъв повтарящ се шаблон или да направи проверка на данни или дори за проверка на форматирането на данни.
RegEx се използва, за да се установи дали низът съдържа или съвпада с даден модел на символ. Регексът е предимно символна последователност, която обозначава модел.
Моделът може да бъде всичко, вариращо от числа, знаци или комбинация от всичко. Regex се използва широко за валидиране. Анализиране или съвпадение на низове, например, намиране дали низът съответства на формат на валута, телефонен номер или формат на датата.
=> Прочетете Лесната серия за обучение на C #.
как да настроите мрежова защитна стена
Какво ще научите:
Regex клас в C #
Класът Regex се използва в C # за извършване на операции с регулярни изрази. Той съдържа няколко различни метода, които могат да се използват за извършване на различни операции, свързани с регулярния израз.
Може да се използва за синтактичен анализ на голям текст, за да се намери определена последователност от символи, като се използват методи, които могат да се използват за извършване на съвпадение, за замяна или могат да се използват за разделяне на символната последователност.
Класът на регулярните изрази присъства в пространството на имената; System.Text.RegularExpression. Класът приема като параметър низ под формата на символна последователност.
Методи на C # Regex
IsMatch
Най-простият и полезен метод в класа Regex е методът IsMatch. Този метод има различни претоварвания за извършване на съвпадение на символи въз основа на различни параметри.
Най-простият е IsMatch (текстов низ) , този метод позволява на потребителя да предостави последователност от символи за съвпадение на низ.
Второто претоварване IsMatch (текстов низ, позиция int). Този метод връща булева стойност и приема два (низ и цяло число) параметъра. Текстът на низа, посочен в параметъра, всъщност е конструктор на регулярни изрази, който ще съвпада с последователността от символи от началната позиция, посочена от цяло числото параметър.
По този начин този метод ще се опита да съответства на въведения низ в позицията, предоставена от цяло число параметър в даден низ.
Третото претоварване, IsMatch (Текст на низ, модел на низ) приема два параметъра и връща булева стойност. Първият параметър е текст, в който потребителят трябва да намери шаблон, а следващият параметър предоставя шаблона, който потребителят търси в дадения текст.
Препоръчително четене = >> Съвпадение на шаблони в MySQL
Замяна (Текст на низа, Текст на заместващия текст)
Методът замяна приема два параметъра и връща стойност на низ. Първият параметър е последователността от символи или регулярния израз, който искате да използвате за съвпадение, а вторият е замяната на регулярния израз.
Методът работи чрез намиране на съвпадение на дадения текст и след това го заменя със заместващ текст, предоставен от потребителя. Подписът на метода е публичен низ Замяна (текст на низ, текст за замяна на текст)
Публичен низ [] Разделяне (текст на низа)
Методът split от клас regex приема въвеждане на низ като параметър и връща масив, съдържащ поднизове. Параметърът, предаден в метода, е низът, който трябва да бъде разделен.
Методът намира съответстващия модел на въвеждане в низа и след като идентифицира всеки съвпадащ модел, той разделя низа на това място на по-малък подниз, като всеки съвпадащ модел е точката на прекъсване. След това методът връща масив, съдържащ всички поднизове.
Използване на Regex C # методи
Нека да разгледаме използването на тези методи, като напишем проста програма.
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); } }
Резултатът от горната програма
Вярно
Вярно
Вярно
Замени света
Здравейте
Свят
Днес
Обяснението за горния код:
В началото на програмата създадохме обект и за шаблона, който ще използваме за съвпадение на кода при последващото въвеждане на низове, използвахме форматирането на текст, за да улесним нещата в началото, но ако ви е удобно, можете започнете да използвате модели на регулярни изрази. (Ще обсъдим модела на регулярния израз в детайли, докато напредваме в този урок)
След това ще използваме низ за съвпадение, за да въведем фактора, който сме декларирали като посочения обект с входния низ и ако съвпада, той ще се върне, за да върне false.
Следващият метод, който използвахме, е IsMethod (въвеждане на низ, индекс int). Този метод приема двупараметрични и тук предоставяме входен низ и индекса, откъдето трябва да започне съвпадението. Например, тук искахме да започнем съвпадението от началото на входния низ.
След това демонстрирахме използването на IsMatch (въвеждане на низ, модел на низ). Тук предоставихме входния низ, след което искахме да открием дали текстът на шаблона присъства във входа или не. Ако е настояще, тогава ще се върне true (както в нашия случай), в противен случай ще се върне false.
Заменен е друг метод, който обсъдихме. Този метод е доста полезен в програми, където искате да направите промени във входните данни или да промените формата на съществуващите данни.
Тук предоставяме два параметъра, първият е входният низ, а вторият е низът, който може да се използва за заместване на предишния низ. Този метод също използва модела, дефиниран в обекта на регулярно изражение, който дефинирахме по-рано.
Друг важен метод, който използвахме, е разделянето. Този метод се използва за разделяне на дадения низ въз основа на някои повтарящи се модели. Тук сме предоставили низ „Hello_World_Today”.
Да кажем, че искаме да премахнем долната черта от дадения низ и да получим поднизовете. За това ние посочваме входния параметър и след това даваме шаблона, който трябва да използваме като точка на разделяне. Методът връща масив и можем да използваме прост цикъл като foreach, за да извлечем всички низове.
Синтаксис на регулярен израз
Има няколко различни синтаксиса като специални символи, квантори, класове символи и т.н., които могат да се използват за съвпадение на определен модел от даден вход.
В тази част от урока ще се потопим дълбоко в синтаксиса, предлаган от regex, и ще се опитаме да разрешим някои сценарии от реалния живот, използвайки ги. Преди да продължим, уверете се, че сте придобили основната идея за регулярния израз и различните методи, налични в класа на регулярните изрази.
Специални символи
Специалните знаци в регулярния израз се използват за присвояване на няколко различни значения на даден модел. Сега ще разгледаме някои от широко използваните специални знаци и тяхното значение в Regex
Специални символи | Значение |
---|---|
w и W | С малки букви ‘w’ се използва за съвпадение на буквено-цифрови / долни символи, а с главни букви ‘W’ се използва за съвпадение на символи, които не са думи. |
^ | Това е един от най-широко използваните синтаксиси. Той обозначава началото, думата или модела след това започва да съвпада от началото на въведения текст. |
$ | Този знак се използва за съвпадение на думи от края на низа. Думите / шаблоните, обозначени преди този символ, ще съвпадат с думите, присъстващи в края на низа. |
. (точка) | Точката се използва за съвпадение на един символ в дадения низ, възникващ веднъж. |
н | Това се използва за нов ред. |
d и D | Малки букви „d“ се използват за съвпадение на цифрен знак, а главни букви „D“ се използват за съвпадение на нецифрени знаци. |
s и S | Малки букви „s“ се използват за съвпадение на бели интервали, а главни букви „S“ се използват за съвпадение на непробели. |
Синтаксис на квантора
Синтаксисът на квантора се използва за преброяване или количествено определяне на критериите за съвпадение. Например, ако искате да проверите дали даден низ съдържа азбука един или повече пъти. Нека да разгледаме някои от често използваните квантори в регулярния израз.
Синтаксис на квантора | Значение |
---|---|
* | Този символ се използва, за да съответства на предходния знак. |
+ | Този символ се използва за съвпадение на един или повече символи в един ред. |
{н} | Цифровата цифра във фигурните скоби се използва, за да съответства на броя на предходния знак, дефиниран от числовите вътре в фигурните скоби. |
{н,} | Числото във фигурните скоби и този символ се използва, за да се увери, че съвпада най-малко с n (т.е. цифровата стойност в скобите). |
{n, m} | Този символ се използва за съвпадение от предходния символ от n брой пъти до m брой пъти. |
? | Този символ прави предходните знаци съвпадение като незадължително. |
Клас на героите
Класът на символите е известен също като набори от символи и това се използва, за да се каже на механизма за регулярни изрази да търси едно съвпадение от няколко знака. Класът символи ще съответства само на един знак и редът на символите, затворени в набора от символи, няма значение.
Клас на героите | Значение |
---|---|
[диапазон] | Символът в квадратна скоба се използва за съвпадение на набор от символи. Например, можем да го използваме, за да дефинираме всеки символ в диапазон от азбуката „a“ до „z“, като заградим диапазона в скобата като [a-z] Или можем да съчетаем с числови „1“ до „9“, като обозначим [1-9] |
[^ диапазон] | Това означава отрицателен клас знаци. Използва се за съвпадение с каквото и да било, а не в диапазона, обозначен вътре в скобата. |
Това се използва за съвпадение на специални символи, които могат да имат свои собствени регулярни символи. Наклонената черта се използва за съвпадение на специалните знаци в тяхната буквална форма. |
Групиране
Кръгли скоби или скоби могат да се използват за групиране на част от регулярния израз заедно. Това позволява на потребителя да добави квантор с израза.
Групиране | Значение |
---|---|
(групов израз) | Кръглите скоби се използват за групиране на израз. |
| | The | оператор се използва вътре в кръглата скоба за използване на алтернатива например (a | b). |
C # Примери за редовен израз
В предишния раздел научихме за символите на регулярния израз, в този раздел ще разгледаме подробно използването на различни символи в регулярния израз и комбинацията, в която те могат да бъдат използвани за съвпадение на различни изрази.
В този урок ще обсъдим някои от най-често срещаните сценарии от реалния живот, с които може да се сблъскате като разработчик, докато работите върху някакво приложение или в проста програма, за да получите въвеждане от потребителя.
Пример за редовен израз със сценарии от реалния живот
Нека научим повече за регулярните изрази, като използваме някои примери в реално време.
Сценарий 1: Проверете дали входният низ е съставен от шестцифрени символи, нечувствителни на малки и малки букви.
Най-често срещаният сценарий за регулярен израз е намирането и съпоставянето на дадена дума. Например, да кажем, че искам произволен азбучен низ от потребителя и този вход трябва да е с дължина точно 6 цифри.
За да потвърдим, че можем да използваме прост регулярен израз. Нека напишем програма, за да разберем по-добре писането и употребата на регулярния израз.
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')); }
Изход
Вярно
Невярно
Обяснение
В този пример се опитваме да проверим входния низ, за да проверим дали съдържа шестцифрени буквени знаци. Символите могат да бъдат както с малки, така и с главни букви, така че трябва да вземем предвид и това.
И така, тук дефинирахме шаблон на регулярен израз в променлива “patternText” и след това го предадохме в обекта на регулярния израз. Следващите редове на кода са доста прости, използвахме метода IsMatch, за да сравним регулярния израз и входния низ.
Нека сега да разгледаме регулярния израз, който сме създали. Изразът (^ [a-zA-Z] {6} $) се състои от 4 различни части. „^“, „[A-zA-Z]“, „{6}“ и „$“. Втората част означава съвпадащите символи, които се използват за извършване на съвпадение на изрази, „a-z“ за малки букви и „A-Z“ за главни букви.
Символът на първата част „^“ гарантира, че низът започва с шаблон, дефиниран във втората част, т.е. азбуки с малки и главни букви.
Фигурните скоби в третата част определят броя на символите в низа, които могат да бъдат идентифицирани от дефинирания шаблон, т.е. 6 в този случай и символът „$“ се уверете, че завършва с модела, дефиниран във втората част.
^[a-zA-Z]{6}$
Сценарий 2: Използвайте регулярен израз, за да потвърдите, че дума, която започва със „Супер“ и има празно пространство след това, т.е., за да провери дали „Супер“ присъства в началото на изречението.
Да приемем, че четем някои потребителски данни и трябва да се уверим, че потребителят винаги започва изречението си с определена дума, число или азбука. Това може да се постигне доста лесно, като се използва прост регулярен израз.
Нека да разгледаме примерна програма и след това да обсъдим подробно как да напишем този израз.
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')); }
Изход
Вярно
Невярно
Обяснение
И в този пример използвахме подобна настройка на кода, както в първия. Моделът на регулярен израз в този сценарий изисква съвпадение с комбинация от думи или изречения, които започват със „Супер“.
^ Супер
И така, тъй като искаме да съвпадаме от началото на поредицата от думи, ще започнем с поставянето на символа „^“, след което ще дадем шаблона, с който искаме да съвпаднем, в този случай „Супер“. Сега моделът, който създадохме „^ Супер“, може да съвпада с всички стойности на супер, дори свръхчовек или свръхестествено, но не искаме само думата „Супер“.
Това означава, че след думата трябва да има празно пространство, което да маркира края на думата и началото на друга дума. За целта ще добавим символ „ s“ към шаблона и по този начин ще направим окончателния си модел като
^ Супер s
Сценарий 3: Използвайте регулярен израз, за да намерите валидни имена на файлове с разширение на типа изображение.
Друг важен сценарий в реално време, с който разработчиците често се сблъскват, е проверката на типовете файлове. Да приемем, че имаме бутон за качване в потребителския интерфейс, който може да приема само разширения от типа изображения.
Трябва да потвърдим файла за качване на потребителя и да го информираме в случай, че е качил грешен файлов формат. Това може лесно да се постигне чрез използване на регулярен израз.
Дадено по-долу е проста програма за проверка на това.
public static void Main(string[] args) jpeg
Изход
Вярно
Вярно
Вярно
Невярно
Невярно
Обяснение
Тук трябва да намерим име на файл. Валидното име на файл се състои от три части ( име на файла +. + разширение на файла ). Трябва да създадем регулярен израз, който да съответства и на трите части. Нека започнем със съвпадение на първата част, т.е. името на файла. Името на файла може да съдържа буквено-цифрови и специални символи.
Както беше обсъдено по-рано, символът за обозначаване е ' w'. Също така, името на файла може да бъде с един или повече знака, така че ще използва символа „+“. Комбинирайте ги и получаваме символа за първата част.
(w+)
Брекет отдели това на части. Следващата част е символът на точка. Тъй като точковият символ има значението си в регулярно изражение, ще използваме обратна наклонена черта преди него, за да му дадем буквално значение. Комбинирайте и двете и имаме покрити първите две части от регулярния израз.
(w+).
Сега, за третата и последна част, можем директно да дефинираме необходимите разширения на файлове, разделени с „|“ ИЛИ символ. След това това може да бъде отделено чрез затваряне в кръгла скоба. Знакът „$“ в края гарантира, че дефинираните разширения са в края на низа. Сега нека ги комбинираме, за да получим последния регулярен израз.
(w+).(jpg|png|jpeg|gif)$
Сега, ако използваме това в програмата, можем да видим, че то съвпада с правилния формат и връща true, но с невалидни формати, връща false.
Сценарий 4: Използвайте регулярен израз, за да проверите формата на адрес на уебсайт
Да приемем, че имаме уеб формуляр, който приема уеб адрес или адрес на домейн. Искаме потребителят да въведе правилния уеб / домейн адрес, докато попълва формуляра. За да се определи дали потребителят е въвел правилен уеб адрес, може да бъде доста полезен регулярният израз.
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')); }
Изход
Вярно
Невярно
Обяснение
въпроси за интервю за тестване на софтуер за опитни кандидати
Тук искаме да съпоставим валидно име на домейн с помощта на регулярен израз. Валидното име на домейн започва със съкращението „www“, последвано от точка (.), След това името на уебсайта след тази точка (.) И в края разширение на домейн.
Така че, подобно на предишния сценарий, ще се опитаме да го съпоставим част по част. Нека първо започнем със съвпадение на „www.“ Част. Така че започваме със стартовия символ, след това като „www.“ Това е нещо, което е фиксирано, затова използваме началния символ, последван от точните думи, за да съвпадат.
“^www.”
След това ще започнем работа по втората част. Втората част от уеб адреса може да бъде всяко буквено-цифрово име. И така, тук ще използваме квадратни скоби, присъстващи в класа на символите, за да определим диапазона, който трябва да бъде съчетан. След добавяне на втората част с втората част ще ни даде.
“^www.[a-zA-Z0-9]{3,20}”
Тук също сме добавили фигурни скоби, за да определим минималната и максималната дължина на символите за името на уебсайта. Дадохме минимум 3 и максимум 20. Можете да дадете каквато искате минимална или максимална дължина.
След като покрихме първата и втората части на уеб адреса, ни остава само последната част, т.е. разширението на домейна. Подобно е на това, което направихме в последния сценарий, директно ще съвпадаме с разширенията на домейна, като използваме ИЛИ и заграждаме всяко валидно разширение на домейна в кръглата скоба.
По този начин, ако добавим всичко това заедно, ще имаме пълен регулярен израз, който да съответства на всеки валиден уеб адрес.
www.[a-zA-Z0-9]{3,20}.(com|in|org|co.in|net|dev)$
Сценарий 5: Използвайте регулярен израз, за да проверите формата на имейл идентификатор
Да приемем, че имаме форма за вход на нашата уеб страница, която иска от потребителите да въведат своя имейл адрес. По очевидни причини няма да искаме формулярът ни да продължи с невалидни имейл адреси. За да проверим дали имейл адресът, въведен от потребителя, е правилен или не, можем да използваме регулярен израз.
Дадено по-долу е проста програма за валидиране на имейл адрес.
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')); }
Изход
Вярно
Вярно
Невярно
Обяснение
Валидният имейл адрес съдържа азбуки, цифри и някои специални знаци като точка (.), Тире (-) и долни черти (_), последвани от символа „@“, който след това е последван от името на домейна и разширението на домейна.
По този начин можем да разделим имейл адреса на четири части, т.е. имейл идентификатор, символ „@“, име на домейн и последното е разширението на домейна.
Нека започнем с писане на регулярен израз за първата част. Той може да бъде буквено-цифров с някои специални знаци. Да приемем, че имаме размер на израза, вариращ от 5 до 25 знака. Подобно на начина, по който го написахме по-рано (в сценария на имейла), можем да измислим следния израз.
^[a-zA-Z0-9._-]{5,25}
Сега, преминавайки към втората част. Това е сравнително лесно, тъй като трябва да съчетаем само един символ, т.е. „@“. Добавянето му към горния израз ни дава.
^[a-zA-Z0-9._-]{5,25}.@
Преминаването към третата част, т.е. името на домейна, винаги ще бъде поредица от малки букви. Ако искате, можете да включите и цифрови или главни букви, но за този сценарий ще използваме азбуки с малки букви.
Ако добавим израза за малки букви с дължина, варираща от 2 до 12 знака, тогава ще имаме следния израз.
^[a-zA-Z0-9._-]{5,25}.@.[a-z]{2,12}
Сега оставаме с израза за разширение на домейн, подобно на четвъртия сценарий, ще се справим с някои специфични разширения на домейни. Ако искате, можете да добавите още от тях, като ги затворите в кръгла скоба и ги разделите с „|“ символ.
Консолидирането на този израз с предишния израз ще ни даде окончателната стойност на израза за проверка на имейл.
^[a-zA-Z0-9._-]{5,25}.@.[a-z]{2,12}.(com|org|co.in|net)
Заключение
В този урок научихме какво представлява регулярният израз заедно със синтаксиса / символите, които се използват за обозначаване, конструиране на регулярен израз. Регулярният израз позволява на потребителя да съчетава низ с даден модел.
Това е много полезно в ситуации, които изискват бърза проверка на входа, например когато потребителят въведе своя имейл адрес или телефонен номер, може да се използва регулярно изражение за бързо потвърждаване на формата и информиране на потребителя за проблема, ако потребителят е въвел грешен формат.
Също така се научихме да се справяме с различни сценарии, които могат да бъдат използвани за различни приложения. Разгледахме процеса стъпка по стъпка, за да напишем изрази за съвпадение на думи, азбуки, адреси на уебсайтове, идентификатори на имейли и дори типове файлове и разширения.
Тези сценарии са доста полезни при валидиране в реално време на потребителски входове, без да се пишат многобройни редове код и по този начин помага за спестяване на време и намаляване на сложността. Тези примери са използвани за насочване на потребителя да създаде свой собствен набор от регулярни изрази и по този начин да му помогне при обработката на няколко други различни сценария.
Регексът може да бъде прост като използване на азбука или цифри, за да съвпадне с дадена поредица от символи или комплекс, като се използва комбинация от специални знаци, квантори, класове класове и т.н., за да се потвърдят сложни формати или да се търси специфичен модел в поредицата от знаци.
Накратко, регулярният израз е доста мощен инструмент за програмист и помага за намаляване на количеството код, което е необходимо да се изпълни в задача за съвпадение на данни или проверка.
=> Проверете ВСИЧКИ уроци за C # тук.
Препоръчително четене
- Инструкция за C # String - Методи за низове с примери за кодове
- C # Случайно число и C # Генератор на произволни низове с примери за кодове
- Урок за регексиране на C ++: Регулярни изрази в C ++ с примери
- Редовен израз на MongoDB Редовен израз $ с пример
- Урок за Java Regex с примери за редовен израз
- Как да използвам регулярните изрази на Unix
- Използване на постопроцесор в JMeter (екстрактор за регулярни изрази)
- Java урок за низове | Низови методи на Java с примери