Регулярні вирази java, блог про шифрування

Існує ще два типи квантіфікаторов, які утворені додатком суфікса? (Слабке, або неповний збіг) або + ( «жадібне», або власне збіг) до перерахованих вище квантіфікатор. Неповний збіг відповідає вибору з найменш можливою кількістю символів, а власне - з максимально можливим.

КлассPatternіспользуется для простої обробки рядків. Для більш складної обробки рядків використовується классMatcher, що розглядається нижче.

У класі Pattern оголошені наступні методи:

Matchermatcher (CharSequenceinput) - повертає Matcher.
за допомогою якого можна знаходити відповідності в рядку input.

Stringpattern () - повертає рядок, відповідну шаблоном.

String [] split (CharSequenceinput) - розбиває рядок input. враховуючи, що роздільником є ​​шаблон.

За допомогою методу matches () класу Pattern можна перевіряти на відповідність шаблону цілого рядка, але якщо необхідно знайти відповідності всередині рядка, наприклад, визначати ділянки, які відповідають шаблону, то клас Pattern не може бути використаний. Для таких операцій необхідно використовувати клас Matcher.

Початковий стан об'єкта типу Matcher не визначене. Спроба дзв-вать будь-якої метод класу для добування інформації про знайдений відповідно призведе до виникнення помилки IllegalStateException. Для того щоб почати роботу з об'єктом Matcher. потрібно викликати один з його методів:

booleanmatches () - перевіряє, чи відповідає вся рядок шаблоном;

booleanlookingAt () - намагається знайти послідовність символів, що починається з початку рядка і відповідну шаблоном;

booleanfind () або booleanfind (intstart) - намагається знайти послідовність символів, що відповідають шаблону, в будь-якому місці рядка. Параметр start вказує на початкову позицію пошуку.

Іноді необхідно скинути стан Matcher 'а в вихідне, для цього застосовується метод reset () або reset (CharSequenceinput). який також встановлює нову послідовність символів для пошуку.

Для заміни всіх підпослідовностей символів, які відповідають шаблону, на задану рядок можна застосувати метод replaceAll (String
replacement).

Для того щоб обмежити пошук межами вхідної послідовності, застосовується метод region (intstart, intend). а для отримання значення цих кордонів - regionEnd () і regionStart (). З регіонами пов'язано кілька методів:

MatcheruseAnchoringBounds (booleanb) - якщо встановлено в true. то початок і кінець регіону відповідають символам ^ і $ відповідно.

booleanhasAnchoringBounds () - перевіряє закріпленість кордонів.

У регулярному виразі для більш зручної обробки вхідної після-довательности застосовуються групи, які допомагають виділити частини знайденої підпослідовності. У шаблоні вони позначаються дужками "(" і ")". Номери груп починаються з одиниці. Нульова група збігається з усією знайденої підпослідовність. Далі наведені методи для добування інформації про групи.

intend () - повертає індекс останнього символу підпослідовності, що задовольняє шаблоном;

intend (intgroup) - повертає індекс останнього символу зазначеної групи;

Stringgroup () - повертає всю підпослідовність, що задовольняє шаблоном;

intgroupCount () - повертає кількість груп;

intstart () - повертає індекс першого символу підпослідовності, що задовольняє шаблоном;

intstart (intgroup) - повертає індекс першого символу зазначеної групи;

booleanhitEnd () - повертає істину, якщо було досягнуто кінець вхідної послідовності.

Наступний приклад показує як можна використовувати можливості класів Pattern і Matcher для пошуку, розбору і розбивки рядків.

publicclass DemoRegular

publicstaticvoid main (String [] args)

// перевірка на відповідність рядка шаблоном

Pattern p1 = Pattern.compile ( "a + y");

Matcher m1 = p1.matcher ( "aaay");

boolean b = m1.matches ();

// пошук і вибір підрядка, заданої шаблоном

Pattern p2 = Pattern.compile (regex);

Matcher m2 = p2.matcher (s);

// розбивка рядки на підрядка із застосуванням шаблону як роздільник

Pattern p3 = Pattern.compile ( "\\ d + \\ s?");

p3.split ( "java5tiger 77 java6mustang");

for (String word. words)

В результаті буде виведено:

First group: abdcxyz

У першому випадку до першої групи належать всі можливі символи, але при цьому залишається мінімальна кількість символів для другої групи.

У другому випадку для першої групи вибирається найменша кількість символів, т. К. Використовується слабке збіг.

У третьому випадку першої групи буде відповідати вся рядок, а для другої не залишається жодного символу, так як друга група використовує слабке збіг.

У четвертому випадку рядок не відповідає регулярному виразу, т. К. Для двох груп вибирається найменша кількість символів.

У класі Matcher оголошені два корисних методу для заміни знайдених підпослідовностей у вхідному рядку.

replacement) - метод читає символи з вхідними стоки і додає їх в sb. Читання зупиняється на start () - 1 позиції попереднього збігу, після чого відбувається додавання в sb рядки replacement. При наступному виклику цього методу проводиться додавання символів, починаючи з символу з індексом end () попереднього збігу.

StringBufferappendTail (StringBuffersb) - додає решту символів з вхідної послідовності в sb. Як правило, викликається після одного або декількох викликів методу appendReplacement ().

Схожі статті