java regex tutorial with regular expression examples
Цей підручник з Java Regex пояснює, що таке регулярний вираз у Java, навіщо він нам потрібен і як його використовувати за допомогою прикладів регулярного виразу:
ДО регулярний вираз на Java, що скорочено ' регулярне вираження ”- це вираз, який використовується для визначення шаблону пошуку для рядків.
Шаблон пошуку може бути простим символом або підрядком, а може бути складним рядком або виразом, що визначає певний шаблон, який потрібно шукати в рядку.
Далі, шаблон може збігатися один або кілька разів із рядком.
=> Завітайте сюди, щоб побачити навчальну серію Java для всіх.
Що ви дізнаєтесь:
- Регулярні висловлювання: навіщо це нам потрібно
- java.util.regex
- Приклад регулярного виразу Java
- Regex Matcher в Java
- Приклад реалізації регулярного виразу
- Клас шаблонів регулярних виразів на Java
- Метод збігів рядкових виражень
- Класи символів регулярних виразів
- Вимірювальні вирази
- Мета-символи регулярного виразу
- Логічний або (|) оператор регулярного виразу
- Перевірка електронної пошти за допомогою регулярного виразу
- Висновок
Регулярні висловлювання: навіщо це нам потрібно
Регулярний вираз в основному використовується для пошуку шаблону в рядку. Чому ми шукаємо шаблон у рядку? Ми можемо захотіти знайти певний шаблон у рядку, а потім маніпулювати ним або редагувати.
Отже, у комп’ютерному додатку ми можемо мати постійну вимогу маніпулювати різними шаблонами. Отже, ми завжди вимагаємо регулярного виразу, щоб полегшити пошук шаблону.
Тепер, отримавши шаблон для пошуку, як саме працює регулярний вираз?
Коли ми аналізуємо та змінюємо текст за допомогою регулярного виразу, ми говоримо, що «ми застосували регулярний вираз до рядка або тексту». Що ми робимо, ми застосовуємо шаблон до тексту у напрямку «зліва направо», а вихідний рядок відповідає шаблону.
Наприклад, розглянемо рядок “ абабабабаб '. Припустимо, що визначено регулярний вираз «аба». Тож тепер ми повинні застосувати цей регулярний вираз до рядка. Застосовуючи регулярний вираз зліва направо, регулярний вираз буде відповідати рядку “ aba_aba___ ”, У двох місцях.
Таким чином, коли в збігу використовується вихідний символ, ми не можемо використовувати його повторно. Таким чином, після знаходження першого відповідника аба, третій символ „а” не використовувався повторно.
Запитання та відповіді на інтерв’ю веб-служб
java.util.regex
Мова Java не передбачає жодного вбудованого класу для регулярних виразів. Але ми можемо працювати з регулярними виразами, імпортуючи “ java.util.regex ”Пакет.
Пакет java.util.regex надає один інтерфейс і три класи, як показано нижче:
Клас візерунка: Клас шаблону представляє скомпільований регулярний вираз. Клас Pattern не має жодних відкритих конструкторів, але він надає статичні методи compile (), які повертають об'єкти Pattern і можуть бути використані для створення шаблону.
Клас матчерів: Об'єкт класу Matcher відповідає шаблону регулярного виразу рядку. Як і клас Pattern, цей клас також не надає жодних публічних конструкторів. Він надає метод matcher (), який повертає об'єкт Matcher.
PatternSyntaxException: Цей клас визначає неперевірений виняток. Об'єкт типу PatternSyntaxException повертає неперевірений виняток, що вказує на синтаксичну помилку в шаблоні регулярних виразів.
Інтерфейс MatchResult: Інтерфейс MatchResult визначає результат відповідності шаблону регулярних виразів.
Приклад регулярного виразу Java
Давайте реалізуємо простий приклад регулярного виразу в Java. У наведеній нижче програмі ми маємо простий рядок як зразок, а потім підбираємо його до рядка. Вихідні дані друкують початкову та кінцеву позиції в рядку, де знаходиться шаблон.
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String args[]) { //define a pattern to be searched Pattern pattern = Pattern.compile('Help.'); // Search above pattern in 'softwareTestingHelp.com' Matcher m = pattern.matcher('softwareTestingHelp.com'); // print the start and end position of the pattern found while (m.find()) System.out.println('Pattern found from position ' + m.start() + ' to ' + (m.end()-1)); } }
Вихід:
Візерунок знайдений з 15 по 19
Regex Matcher в Java
Клас Matcher реалізує інтерфейс MatchResult. Matcher діє як механізм регулярних виразів і використовується для точного узгодження послідовності символів.
Нижче наведено загальні методи класу Matcher. Він має більше методів, але ми перерахували лише найважливіші методи нижче.
Не | Метод | Опис |
---|---|---|
7 | int start () | Дає початковий індекс узгодженої підпослідовності і повертає його. |
1 | логічні збіги () | Перевіряє, чи регулярний вираз відповідає шаблону. |
два | Візерунок візерунка () | Повертає зразок, який інтерпретує збіжник. |
3 | логічне знаходження () | Цей метод знаходить наступний вираз, який відповідає шаблону. |
4 | логічне знаходження (int start) | Те саме, що і find (), але знаходить вираз, якому потрібно відповідати з заданої початкової позиції. |
5 | Рядова група () | Повертає послідовність, що відповідає шаблону. |
6 | Рядова група (назва рядка) | Повертає вхідну підпослідовність. Це фіксується в попередній операції збігу, захоплюючи групу із зазначеним іменем. |
8 | int end () | Повертає кінцеву позицію / індекс узгодженої підпослідовності. |
9 | int groupCount () | Повернути загальну кількість відповідних підпослідовностей. |
10 | String replaceAll (Заміна рядка) | Замініть усі підпослідовності вхідної послідовності, що відповідають шаблону, заданим рядком заміни. |
одинадцять | String replaceFirst (Заміна рядка) | Замініть першу відповідну підпослідовність вхідної послідовності вказаним рядком заміни. |
12 | Рядок toString () | Повернути рядкове представлення поточного збігу. |
Приклад реалізації регулярного виразу
Подивимось приклад використання деяких із цих методів.
import java.util.regex.Matcher; import java.util.regex.Pattern; public class MatcherDemo { public static void main(String[] args) { String inputString = 'She sells sea shells on the sea shore with shells'; //obtain a Pattern object Pattern pattern = Pattern.compile('shells'); // obtain a matcher object System.out.println('input string: ' + inputString); Matcher matcher = pattern.matcher(inputString); inputString = matcher.replaceFirst('pearls'); System.out.println('
replaceFirst method:' + inputString); //use replaceAll method to replace all occurrences of pattern inputString = matcher.replaceAll('pearls'); System.out.println('
replaceAll method:' + inputString); } }
Вихід:
вхідний рядок: Вона продає морські мушлі на березі моря за допомогою мушлі
replaceFirst метод: Вона продає морські перлини на березі моря за допомогою черепашок
replaceAll метод: вона продає морські перлини на березі моря перлами
Клас шаблонів регулярних виразів на Java
Клас шаблону визначає шаблон для механізму регулярних виразів, який потім можна використовувати для узгодження з вхідним рядком.
У наступній таблиці наведені методи, що використовуються в класі Pattern, який зазвичай використовується.
Не | Метод | Опис |
---|---|---|
7 | Рядок [] split (вхід CharSequence, int limit) | Вхідний рядок розділений навколо збігів, знайдених за заданим шаблоном. |
1 | статична компіляція шаблону (строковий регулярний вираз) | Повертає скомпільоване подання регулярного виразу. |
два | статична компіляція шаблону (String регулярний вираз, int прапори) | Компілює заданий регулярний вираз, використовуючи вказані прапори та шаблон повернення. |
3 | Збіги збігів (введення CharSequence) | Повертає збіг, узгоджуючи вхідну послідовність із шаблоном. |
4 | статичні булеві збіги (строковий регулярний вираз, вхід CharSequence) | Компілює даний регулярний вираз і узгоджує шаблон із заданим введенням. |
5 | int прапори () | Повертає прапори шаблону, за яким виконується відповідність. |
6 | Розділення рядка [] (вхід CharSequence) | Вхідний рядок розділений навколо збігів, знайдених за заданим шаблоном. |
8 | Рядок () | Повертає шаблон регулярного виразу. |
9 | статична рядок (рядок) | Повертає буквальний рядок (шаблон) для даного рядка. |
10 | Рядок toString () | Отримати рядкове представлення шаблону. |
У наведеному нижче прикладі використовуються деякі з вищезазначених методів класу Pattern.
import java.util.regex.*; public class Main { public static void main(String[] args) { // define a REGEX String String REGEX = 'Test'; // string to be searched for given pattern String actualString = 'Welcome to SoftwareTestingHelp portal'; // generate a pattern for given regex using compile method Pattern pattern = Pattern.compile(REGEX); // set limit to 2 int limit = 2; // use split method to split the string String[] array = pattern.split(actualString, limit); // print the generated array for (int i = 0; i Вихід:
array [0] = Ласкаво просимо до програмного забезпечення
масив [1] = портал ingHelp
У наведеній вище програмі ми використовуємо метод компіляції для створення шаблону. Потім ми розділяємо вхідний рядок щодо цього шаблону і зчитуємо його в масив. Нарешті, ми відображаємо масив, який був створений в результаті розбиття вхідного рядка.
Метод збігів рядкових виражень
Ми бачили метод String.Contains () у наших підручниках з рядків. Цей метод повертає булеве значення true або false залежно від того, містить рядок вказаний символ у ньому чи ні.
Подібним чином, у нас є метод “match ()”, щоб перевірити, чи відповідає рядок регулярному виразу чи регулярному виразу. Якщо рядок відповідає вказаному регулярному виразу, тоді повертається справжнє значення або повертається false.
Загальний синтаксис методу match ():
public boolean matches (String regex)
Якщо вказаний регулярний вираз не є дійсним, буде викинуто “PatternSyntaxException”.
Давайте реалізуємо програму для демонстрації використання методу match ().
public class MatchesExample{ public static void main(String args[]){ String str = new String('Java Series Tutorials'); System.out.println('Input String: ' + str); //use matches () method to check if particular regex matches to the given input System.out.print('Regex: (.*)Java(.*) matches string? ' ); System.out.println(str.matches('(.*)Java(.*)')); System.out.print('Regex: (.*)Series(.*) matches string? ' ); System.out.println(str.matches('(.*)Series(.*)')); System.out.print('Regex: (.*)Series(.*) matches string? ' ); System.out.println(str.matches('(.*)String(.*)')); System.out.print('Regex: (.*)Tutorials matches string? ' ); System.out.println(str.matches('(.*)Tutorials')); } }
Вихід:
Вхідний рядок: Підручники із серії Java
Регулярний вираз: (. *) Java (. *) Відповідає рядку? правда
Регулярний вираз: (. *) Серія (. *) Відповідає рядку? правда
Регулярний вираз: (. *) Серія (. *) Відповідає рядку? помилковий
Регулярний вираз: (. *) Підручники відповідають рядку? правда
Ми використовуємо безліч спеціальних символів та метасимволів із регулярними виразами на Java. Ми також використовуємо багато класів символів для зіставлення зразків. У цьому розділі ми надамо таблиці, що містять класи символів, метасимволи та квантори, які можна використовувати з регулярним виразом.
Класи символів регулярних виразів
Не Клас характеру Опис 7 [a-z && [^ m-p]] Віднімання: від a до z, а не від m до p: [a-lq-z] 1 [pqr] p, q або r два [^ pqr] Заперечення: Будь-який символ, крім p, q або r 3 [a-zA-Z] Діапазон: від a до z або від A до Z включно 4 [a-d [m-p]] Об'єднання: від a до d, або від m до p: [a-dm-p] 5 [a-z && [def]] Перетин: d, e або f 6 [a-z && [^ bc]] Віднімання: від a до z, крім b та c: [ad-z]
Вимірювальні вирази
Квантори використовуються, щоб вказати, скільки разів символ буде зустрічатися в регулярному виразі.
безкоштовне програмне забезпечення для копіювання DVD 10
У наступній таблиці наведені загальні квантори регулярних виразів, що використовуються в Java.
Не Квантор регулярних виразів Опис 7 IN Будь-який несловний символ, [^ w] 1 х? x з’являється один раз або зовсім не з’являється два x + x з'являється один або кілька разів 3 x * x трапляється нуль і більше разів 4 x {n} x трапляється n разів 5 x {n,} x трапляється n або більше разів 6 X та Z} x трапляється принаймні y разів, але менше z разів
Мета-символи регулярного виразу
Метасимволи в регулярному виразі працюють як скорочені коди. Ці коди включають пробіли та пробіли, а також інші шорткоди.
У наступній таблиці перелічені мета-символи регулярного виразу.
Не Мета символи Опис 1 . Будь-який символ (може відповідати або не відповідати термінатору) два d Будь-які цифри, [0-9] 3 D Будь-який нецифровий, [^ 0-9] 4 s Будь-який пробіл, [ t n x0B f r] 5 S Будь-який непробільний символ, [^ s] 6 in Будь-який символ слова, [a-zA-Z_0-9] 8 b Межа слова 9 Б Несловна межа
Нижче наведена програма Java, яка використовує зазначені вище спеціальні символи в регулярному виразі.
import java.util.regex.*; public class RegexExample{ public static void main(String args[]){ // returns true if string exactly matches 'Jim' System.out.print('Jim (jim):' + Pattern.matches('Jim', 'jim')); // Returns true if the input string is Peter or peter System.out.println('
[Pp]eter(Peter) :' + Pattern.matches('[Pp]eter', 'Peter')); //true if string = abc System.out.println('
.*abc.*(pqabcqp) :' + Pattern.matches('.*abc.*', 'pqabcqp')); // true if string doesn't start with a digit System.out.println('
^[^\d].*(abc123):' + Pattern.matches('^[^\d].*', 'abc123')); // returns true if the string contains exact three letters System.out.println('
[a-zA-Z][a-zA-Z][a-zA-Z] (aQz):' + Pattern.matches('[a-zA-Z][a-zA-Z][a-zA-Z]', 'aQz')); System.out.println('
[a-zA-Z][a-zA-Z][a-zA-Z], a10z' + Pattern.matches('[a-zA-Z][a-zA-Z][a-zA-Z], a10z', 'a10z')); //input string length = 4 // true if the string contains 0 or more non-digits System.out.println('
\D*, abcde:' + Pattern.matches('\D*', 'abcde')); //True // true of line contains only word this ^-start of the line, $ - end of the line System.out.println('
^This$, This is Java:' + Pattern.matches('^This$', 'This is Java')); System.out.println('
^This$, This:' + Pattern.matches('^This$, This', 'This')); System.out.println('
^This$, Is This Java?:' + Pattern.matches('^This$, Is This Java?', 'Is This Java?')); } }
Вихід:
Джим (Джим): помилково
[Pp] етер (Петро): правда
. * abc. * (pqabcqp): true
^ [^ d]. * (abc123): true
[a-zA-Z] [a-zA-Z] [a-zA-Z] (aQz): правда
[a-zA-Z] [a-zA-Z] [a-zA-Z], a10zfalse
D *, abcde: істина
^ Цей $, це Java: false
^ Цей $, This: false
^ Цей $, це Java?: False
У наведеній вище програмі ми запропонували різні регулярні вирази, які відповідають вхідному рядку. Читачам рекомендується прочитати коментарі в програмі до кожного регулярного виразу, щоб краще зрозуміти концепцію.
Логічний або (|) оператор регулярного виразу
Ми можемо використовувати логічний або (| оператор) у регулярному виразі, що дає нам можливість вибрати будь-який операнд | оператора. Ми можемо використовувати цей оператор у регулярному виразі для вибору символу або рядка. Наприклад, якщо ми хочемо зіставити обидва слова, 'test' і 'Test', тоді ми включимо ці слова в логічний або оператор як Test | test.
Давайте подивимось на наступний приклад, щоб зрозуміти цей оператор.
import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexOR { public static void main(String[] args) { // Regex string to search for patterns Test or test String regex = '(Test|test)'; // Compiles the pattern and obtains the matcher object from input string. Pattern pattern = Pattern.compile(regex); String input = 'Software Testing Help'; Matcher matcher = pattern.matcher(input); // print every match while (matcher.find()) { System.out.format('Text '%s' found at %d to %d.%n', matcher.group(), matcher.start(), matcher.end()); } //define another input string and obtain the matcher object input = 'SoftwaretestingHelp'; matcher = pattern.matcher(input); // Print every match while (matcher.find()) { System.out.format('Text '%s' found at %d to %d.%n', matcher.group(), matcher.start(), matcher.end()); } } }
Вихід:
Текст 'Тест' знайдений з 9 по 13.
Текст 'тест' знайдений з 8 до 12.
У цій програмі ми запропонували регулярний вираз “(Тест | тест)”. Тоді спочатку ми даємо вхідний рядок як «Довідка щодо тестування програмного забезпечення» та відповідаємо шаблону. Ми бачимо, що збіг знайдено і позиція надрукована.
Далі ми даємо вхідний рядок як “SoftwaretestingHelp”. Цього разу також збіг знайдений. Це пояснюється тим, що регулярний вираз використовував оператор або оператор, а отже, і шаблон по обидві сторони | оператор відповідає рядку.
Перевірка електронної пошти за допомогою регулярного виразу
Ми також можемо перевірити ідентифікатор електронної пошти (адресу) за допомогою регулярного виразу, використовуючи метод java.util.regex.Pattern.matches (). Він відповідає вказаному ідентифікатору електронної пошти із регулярним виразом і повертає true, якщо електронне повідомлення є дійсним.
Наступна програма демонструє перевірку електронної пошти за допомогою регулярного виразу.
public class EmailDemo { static boolean isValidemail(String email) { String regex = '^[\w-_\.+]*[\w-_\.]\@([\w]+\.)+[\w]+[\w]$'; //regex to validate email. return email.matches(regex); //match email id with regex and return the value } public static void main(String[] args) { String email = 'ssthva@gmail.com'; System.out.println('The Email ID is: ' + email); System.out.println('Email ID valid? ' + isValidemail(email)); email = '@sth@gmail.com'; System.out.println('The Email ID is: ' + email); System.out.println('Email ID valid? ' + isValidemail(email)); } }
Вихід:
Ідентифікатор електронної пошти: ssthva@gmail.com
Дійсний ідентифікатор електронної пошти? правда
Ідентифікатор електронної пошти: @ sth @ gmail.com
Дійсний ідентифікатор електронної пошти? помилковий
Як ми бачимо з наведеного вище, перший ідентифікатор електронної пошти є дійсним. Другий ідентифікатор безпосередньо починається з @, і, отже, регулярний вираз не перевіряє його. Отже, це недійсний ідентифікатор.
Як запустити файл .jar у Windows 10
Часті запитання
Q # 1) Що є в регулярному виразі?
Відповідь: ДО Регулярний вираз загальновизначений регулярний вираз - це шаблон або послідовність символів (звичайних або спеціальних або метасимволів), що використовується для перевірки вхідного рядка.
Q # 2) Яке значення має клас Matcher для регулярного виразу на Java?
Відповідь: Клас збігів (java.util.regex.Matcher) діє як механізм регулярних виразів. Він виконує операції зіставлення, інтерпретуючи шаблон.
Q # 3) Який шаблон у Java?
Відповідь: Пакет java.util.regex надає клас Pattern, який використовується для компіляції регулярного виразу в шаблон, який є стандартним представленням регулярного виразу. Потім цей шаблон використовується для перевірки рядків, узгоджуючи його із шаблоном.
Q # 4) Що таке B у регулярному виразі?
Відповідь: B у регулярному виразі позначається як b і є якірним символом, який використовується для відповідності позиції, яка називається межею слова. Початок рядка позначається знаком (^), а кінець рядка позначається знаком долара ($).
Q # 5) Чи є Java безпечною для роботи з шаблонами?
Відповідь: Так. Екземпляри класу Pattern незмінні та безпечні для використання кількома паралельними потоками. Але екземпляри класу matcher не є безпечними для потоків.
Висновок
У цьому підручнику ми обговорили регулярні вирази на Java. Регулярний вираз, також відомий як 'регулярний вираз', використовується для перевірки вхідного рядка в Java. Java надає java.util.regex ' пакет, який надає класи, такі як Pattern, Matcher тощо, які допомагають визначити та узгодити шаблон із вхідним рядком.
Ми також бачили різні спеціальні класи символів та метасимволи, які ми можемо використовувати в регулярному виразі, що дають скорочені коди для узгодження зразків. Ми також дослідили перевірку електронної пошти за допомогою регулярного виразу.
=> Ознайомтеся з простими навчальними серіями Java тут.
Рекомендована література