c regex tutorial what is c regular expression
Цей підручник з C # Regex пояснює, що таке регулярний вираз на C #, його синтаксис, методи класу Regex та як використовувати ці методи за допомогою прикладів:
Регулярний вираз у C # використовується для узгодження певного шаблону символів. Регулярні вирази використовуються всякий раз, коли користувачеві потрібно знайти якийсь повторюваний шаблон, зробити перевірку даних або навіть для перевірки форматування даних.
RegEx використовується, щоб визначити, чи рядок містить або відповідає заданому шаблону символів. Регулярний вираз - це насамперед послідовність символів, що позначає шаблон.
Шаблон може бути будь-яким, починаючи від цифр, символів або їх поєднання. Regex широко використовується для перевірки. Синтаксичний або синтаксичний рядки, наприклад, пошук відповідності рядка формату валюти, номеру телефону або формату дати.
=> Прочитайте навчальну серію Easy C #.
основні запитання для інтерв’ю у Java для свіжих
Що ви дізнаєтесь:
Клас регулярних виразів на C #
Клас регулярних виразів використовується в C # для виконання операцій регулярного виразу. Він містить кілька різних методів, які можна використовувати для виконання різних операцій, пов’язаних із регулярним виразом.
Він може бути використаний для синтаксичного аналізу великого тексту для пошуку певної послідовності символів за допомогою методів, які можуть бути використані для виконання збігу, заміни або для розділення послідовності символів.
Клас регулярних виразів присутній усередині простору імен; System.Text.RegularExpression. Клас приймає як параметр рядок у вигляді послідовності символів.
C # Методи регулярних виразів
IsMatch
Найпростішим і найкориснішим методом у класі Regex є метод IsMatch. Цей метод має різні перевантаження для виконання зіставлення символів на основі різних параметрів.
Найпростіший - це IsMatch (текстовий рядок) , цей метод дозволяє користувачеві надати послідовність символів для відповідності рядку.
Друге перевантаження IsMatch (текст рядка, позиція int). Цей метод повертає булеве значення і приймає два (рядок та ціле число) параметри. Текстовий рядок, зазначений у параметрі, в основному є конструктором регулярних виразів, який збігатиметься з послідовністю символів із початкової позиції, вказаної цілим числовим параметром.
Таким чином, цей метод намагатиметься зіставити рядок, що вводиться, у позиції, заданій цілочисельним параметром у даному рядку.
Третя перевантаження, IsMatch (текст рядка, рядок) приймає два параметри і повертає булеве значення. Перший параметр - це текст, в якому користувачеві потрібно знайти шаблон, а наступний параметр - шаблон, який користувач шукає у даному тексті.
Рекомендована література = >> Відповідність шаблону в MySQL
Замінити (текст рядка, текст заміни рядка)
Метод replace приймає два параметри і повертає значення рядка. Перший параметр - це послідовність символів або регулярний вираз, який ви хочете використовувати для збігу, а другий - заміна регулярного виразу.
Метод працює, знаходячи відповідність даного тексту, а потім замінюючи його текстом заміщення, наданим користувачем. Підпис методу є загальнодоступний рядок Замінити (текст рядка, текст заміни рядка)
Відкритий рядок () Розділити (текст рядка)
Метод split із класу регулярних виразів приймає введення рядка як параметр і повертає масив, що містить підрядки. Параметр, переданий у методі, є рядком, який потрібно розділити.
Метод знаходить відповідний шаблон введення в рядку, і як тільки він ідентифікує будь-який відповідний шаблон, він розділяє рядок у цьому місці на меншу підрядок, при цьому кожен відповідний шаблон є точкою розриву. Потім метод повертає масив, що містить усі підрядки.
Використання методів 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); } }
Результат роботи вищезазначеної програми
Правда
Правда
Правда
Замінити Світ
Здравствуйте
Світ
Сьогодні
Пояснення для вищевказаного коду:
На початку програми ми створили об'єкт, і для шаблону, який ми будемо використовувати для відповідності коду в наступному введенні рядка, ми використовували форматування тексту, щоб на початку все було простіше, але якщо вам зручно, ви можете починайте використовувати шаблони регулярних виразів. (Ми будемо детально обговорювати шаблон регулярних виразів, рухаючись вперед у цьому підручнику)
Потім ми будемо використовувати рядок match для введення коефіцієнта, який ми оголосили як вказаний об’єкт, із вхідним рядком, і якщо він збігається, він повернеться до false.
Наступним методом, який ми використовували, є IsMethod (введення рядка, індекс int). Цей метод приймає двопараметричний, і тут ми надаємо вхідний рядок та індекс, звідки повинен починатися збіг. Наприклад, тут ми хотіли розпочати збіг з початку вхідного рядка.
Потім ми продемонстрували використання IsMatch (введення рядка, шаблон рядка). Тут ми надали вхідний рядок, тоді ми хотіли виявити, якщо текст шаблону присутній у вхідних даних чи ні. Якщо це справжнє значення, воно поверне true (як у нашому випадку), інакше воно поверне false.
Інший метод, який ми обговорювали, замінений. Цей метод досить корисний у програмах, де потрібно внести зміни до вхідних даних або змінити формат наявних даних.
Тут ми наводимо два параметри, перший - це вхідний рядок, а другий - рядок, який може бути використаний для заміни попереднього рядка. Цей метод також використовує шаблон, визначений в об'єкті регулярних виразів, який ми визначили раніше.
Ще одним важливим методом, який ми використовували, є розділення. Цей метод використовується для розділення заданого рядка на основі деяких повторюваних шаблонів. Тут ми надали рядок “Hello_World_Today”.
Скажімо, ми хочемо видалити підкреслення з даного рядка та отримати підрядки. Для цього ми вказуємо вхідний параметр, а потім даємо шаблон, який нам потрібно використовувати як точку розщеплення. Метод повертає масив, і ми можемо використовувати простий цикл, як foreach, для отримання всіх рядків.
Синтаксис регулярних виразів
Існує кілька різних синтаксисів, таких як спеціальні символи, квантори, класи символів тощо, які можуть бути використані для узгодження певного зразка з даного вводу.
У цій частині підручника ми заглибимося в синтаксис, запропонований регулярним виразом, і спробуємо вирішити деякі реальні сценарії, використовуючи їх. Перш ніж продовжувати, переконайтеся, що ви набули базової ідеї регулярного виразу та різних методів, доступних у класі регулярних виразів.
Спеціальні символи
Спеціальні символи у регулярному виразі використовуються для присвоєння шаблону декількох різних значень. Зараз ми розглянемо деякі широко використовувані спеціальні символи та їх значення в Regex.3
Спеціальні символи | Значення |
---|---|
w та W | Малі букви «w» використовуються для збігу буквено-цифрових / підкреслених символів, а великі літери «W» використовуються для відповідності символів, що не містять слів. |
^ | Це один із найбільш широко використовуваних синтаксисів. Він позначає початок, слово чи шаблон після цього починає відповідати з початку вхідного тексту. |
$ | Цей знак використовується для відповідності слів із кінця рядка. Слова / візерунки, позначені перед цим символом, збігатимуться зі словами, присутніми в кінці рядка. |
. (крапка) | Крапка використовується для узгодження одного символу в даному рядку, що трапляється один раз. |
n | Це використовується для нового рядка. |
d та D | Малі регістри «d» використовуються для збігу символів із цифр, а великі регістри «D» - для символів, що не належать до цифр. |
s та S | Малі букви «s» використовуються для збігу пробілів, а великі регістри «S» використовуються для відповідності непробілів. |
Синтаксис квантора
Синтаксис квантора використовується для підрахунку або кількісної оцінки критеріїв відповідності. Наприклад, якщо ви хочете перевірити, чи містить певний рядок алфавіт один або кілька разів. Давайте подивимось на деякі часто використовувані квантори в регулярному виразі.
Синтаксис квантора | Значення |
---|---|
* | Цей символ використовується для відповідності попередньому символу. |
+ | Цей символ використовується для збігу одного або декількох символів підряд. |
{n} | Цифрова цифра всередині фігурних дужок використовується для збігу з номером попереднього символу, визначеного числовими фігурними дужками. |
{n,} | Цифра в фігурних дужках і цей символ використовується, щоб переконатися, що вона відповідає принаймні n (тобто числове значення всередині фігурних дужок). |
{п, м} | Цей символ використовується для відповідності попереднього символу від n кількості разів до m кількості разів. |
? | Цей символ робить попередні символи збігом необов’язковими. |
Клас персонажа
Клас символів також відомий як набори символів, і він використовується для того, щоб сказати механізму регулярних виразів шукати один збіг з кількох символів. Клас символів буде відповідати лише одному символу, і порядок символів, укладених всередині набору символів, не має значення.
Клас персонажа | Значення |
---|---|
(діапазон) | Символ квадратної дужки використовується для відповідності діапазону символів. Наприклад, ми можемо використовувати його для визначення будь-якого символу в діапазоні від алфавіту 'a' до 'z', вклавши діапазон всередині дужки, як (a-z) Або ми також можемо збігати числові цифри '1' з '9', позначаючи (1-9) |
(^ діапазон) | Це позначає клас заперечення символів. Він використовується для збігу з чим завгодно, не в діапазоні, позначеному всередині дужки. |
Це використовується для узгодження спеціальних символів, які можуть мати власні символи регулярних виразів. Коса риса використовується для відповідності спеціальних символів у їх буквальній формі. |
Групування
Круглі дужки або дужки можна використовувати для групування частини регулярного виразу. Це дозволяє користувачеві додати квантор із виразом.
Групування | Значення |
---|---|
(груповий вираз) | Круглі дужки використовуються для групування виразу. |
| | | оператор використовується всередині круглої дужки для використання альтернативи, наприклад (a | b). |
C # Приклади регулярних виразів
У попередньому розділі ми дізналися про символи регулярних виразів, у цьому розділі ми детально розглянемо використання різних символів у регулярному виразі та комбінацію, в якій їх можна використовувати для збігу різних виразів.
У цьому підручнику ми обговоримо деякі найбільш поширені реальні сценарії, з якими ви можете зіткнутися як розробник під час роботи над деяким додатком або простою програмою для отримання вводу користувача.
Приклад регулярних виразів із реальними сценаріями
Давайте дізнаємось більше про регулярні вирази, використовуючи деякі приклади в реальному часі.
Сценарій 1: Перевірте, чи вхідний рядок складається з 6-значних символів алфавіту, що не враховують регістр.
Найбільш поширеним сценарієм регулярних виразів є пошук і відповідність даному слову. Наприклад, скажімо, я хочу від користувача випадковий алфавітний рядок, і це введення має бути рівно 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)
Висновок
У цьому підручнику ми дізналися, що таке регулярний вираз разом із синтаксисом / символами, які використовуються для позначення, побудови регулярного виразу. Регулярний вираз дозволяє користувачеві узгоджувати рядок із заданим зразком.
Це дуже корисно в ситуаціях, коли потрібна швидка перевірка даних, наприклад, коли користувач вводить свою адресу електронної пошти або номер телефону, регулярний вираз може бути використаний для швидкої перевірки формату та інформування користувача про проблему, якщо користувач ввів неправильний формат.
Ми також навчилися вирішувати різні сценарії, які можуть бути використані для різних програм. Ми розглянули покроковий процес написання виразів для відповідних слів, алфавітів, адрес веб-сайтів, ідентифікаторів електронної пошти та навіть типів файлів та розширень.
Ці сценарії дуже корисні в режимі реального часу для перевірки введених користувачем даних без написання численних рядків коду, і тим самим допомагають заощадити час і зменшити складність. Ці приклади були використані, щоб допомогти користувачеві створити власний набір регулярних виразів і, таким чином, допомогти їм в обробці кількох інших різних сценаріїв.
Regex може бути простим, як використання алфавіту або цифр для збігу з даною серією символів або складних, використовуючи комбінацію спеціальних символів, кванторів, класів символів тощо для перевірки складних форматів або пошуку певного зразка в серії символів.
У двох словах, регулярний вираз є досить потужним інструментом для програміста і допомагає зменшити обсяг коду, який потрібно виконати для завдання зіставлення даних або перевірки.
=> Перевірте ВСІ підручники з C # тут.
Рекомендована література
- Підручник з рядків C # - Рядові методи з прикладами коду
- Випадкове число C # та генератор випадкових рядків C # із прикладами коду
- Підручник із регулярних виразів C ++: регулярні вирази на C ++ з прикладами
- Регулярний вираз $ MongeDB регулярного виразу з прикладом
- Підручник з Java Regex із прикладами регулярних виразів
- Як використовувати регулярні вирази Unix
- Використання постпроцесора в JMeter (екстрактор регулярних виразів)
- Підручник із рядків Java | Рядові методи Java на прикладах