Робота з регулярними виразами в Delphi, Стрілець Coder
Механізм обробки регулярних виразів знаходиться в модулі System.RegularExpressions і складається з одного класу і двох записів (за винятком службових компонентів).
- TRegEx – (клас) власне обробка регулярного вираження;
- TMatch – (запис) подання одиничного результату обробки;
- TMatchCollection – (запис) колекція результатів обробки (TMatch). Використовується, якщо передбачається, що в тексті може бути кілька фрагментів, що відповідають даному регулярному виразу.
Створення об'єкта для обробки регулярного вираження
Для того щоб створити екземпляр класу TRegEx, який працюватиме з ним, необхідно передати цей вираз як параметр конструктора.
Важливо, що регулярне вираження, з яким працюватиме даний об'єкт, згодом неможливо змінити. Для роботи з іншим регулярним виразом потрібно буде створити інший об'єкт.
Після того, як об'єкт для обробки регулярного виразу створений можна перейти до вирішення прикладних завдань. Наприклад, пошук відповідності або заміна фрагментів тексту.
Пошук відповідностей
Пошук одиничного збігу здійснюється досить легко.
Для цього потрібно передати аналізований рядок як параметр методу Match, і він поверне значення типу TMatch, якщо в ньому є відповідність. Знайдений текст буде доступний через поле Value TMatch.
Якщо відповідностей у тексті може бути кілька, спосіб реалізації залежить від конкретної задачі.
Якщо потрібно просто знайти першу (від початку рядка) відповідність, можна також скористатися методом Match. Він коректно відпрацює і за наявностікількох відповідностей, але поверне лише перше з них. В іншому випадку слід використовувати метод Matches і працювати з TMatchCollection,
Виклик методу Matches аналогічний методу Match.
Кожна знайдена відповідність буде доступна як елемент колекції (TMatch) TMatchCollection.
Крім вищеописаних завдань під час пошуку відповідностей може вимагати навіть сам пошук конкретних результатів, а лише підтвердження їх наявності.
Для цього є метод IsMatch класу TRegEx. У разі наявності в аналізованому рядку хоча б однієї відповідності регулярному виразу, цей метод поверне true. Також як і в попередніх випадках, аналізований рядок передається як параметр.
Заміна фрагментів тексту за регулярним виразом
Для заміни фрагментів тексту за регулярним виразом служить метод Replase класу TRegEx. Він приймає два рядкові аргументи: аналізований рядок і рядок, на який будуть замінені всі відповідності даному регулярному виразу.
Поділ рядків за регулярним виразом
Клас TRegEx підтримує поділ рядка за допомогою регулярного виразу для пошуку місць поділу.
Поділ здійснюється за допомогою методу Split, який має кілька перевантажень. Найбільш проста з них приймає як параметр лише аналізований рядок. Даний метод повертає масив розділених рядків у форматі TArray.
Проте робота цього має одну особливість. Він не завжди коректно обробляє прогалини та керуючі символи. Тому перед використанням рядків, отриманих у результаті, може знадобитися видалення зайвих символів з допомогою функції Trim.
Нижче наведено приклад поділу рядків за регулярним виразом зВикористання функції Trim.