Синтаксис регулярних виразів
Регулярні вирази.
Загальна інформація
Регулярні вирази (regular expression, regexp, регексп) - механізм, що дозволяє задати шаблон для рядка і здійснити пошук даних, відповідних цьому шаблону в заданому тексті. Крім того, додаткові функції по роботі з regexp'ами дозволяють отримати знайдені дані у вигляді масиву рядків, провести заміну в тексті за шаблоном, розбиття рядка за шаблоном і тому подібне Проте головною їх функцією, на якій засновані всі інші, є саме функція пошуку в тексті даних, відповідних шаблону, описаному в синтаксисі регулярних виразів.
Дуже часто регулярні вирази використовуються для того, щоб перевірити, чи є даний рядок рядком в необхідному форматі. Наприклад наступний regexp призначений для перевірки того, що рядок містить коректну e-mail адресу:
/^\w+([\.\w]+)*\w@\w((\.\w)*\w+)*\.\w{2,3}$/
Регулярні вирази прийшли до нас з Unix і Perl. У PHP існує два різні механізми для обробки регулярних виразів: POSIX-сумісні і Perl-сумісні. Їх синтаксис багато в чому схожий, проте Perl-сумісні регулярні вирази потужніші і, до того ж, працюють набагато швидше (в деяких випадках до 10 разів швидше). Тому тут ми вестимемо мову лише про Perl-сумісні регулярні вирази.
До речі, необхідно відмітити, що повний опис синтаксису регулярних виразів, наявний в PHP Manual, займає більше 50 кілобайт і, природно, тут ми не розглядатимемо весь синтаксис. Нам необхідні лише основи, які допоможуть вам зрозуміти, як саме пишуться регулярні вирази.
Суттю механізму регулярних виразів є те, що вони дозволяють задати шаблон для нечіткого пошуку по тексту. Наприклад, якщо перед вами стоїть завдання знайти в тексті певне слово, то з цим завданням добре справляються і звичайні функції роботи з рядками. Проте якщо вам потрібно знайти "те, не знаю що", про що ви можете сказати лише те, як приблизно це повинно виглядати - те тут без регулярних виразів просто не обійтися. Наприклад, вам необхідно знайти в тексті інформацію, про яку вам відомо лише те, що це "3 або 4 цифри після яких через пропуск йде 5 заголовних латинських букв", то ви зможете зробити це дуже просто, скориставшись наступним регулярним виразом:
/\d{3,4}\s[A-Z]{5}/
Синтаксис регулярних виразів
Регулярні вирази, як вже було сказано вище, є рядком. Рядок завжди починається з символу роздільника, за яким слідує безпосередньо регулярний вираз, потім ще один символ роздільника і потім необов’язковий список модифікаторів. Як символ роздільника зазвичай використовується слеш ('/'). Таким чином в наступному регулярному виразі: /\d{3}-\d{2}/m, символ '/' є роздільником, рядок '\d{3}-\d{2}' - безпосередньо регулярним виразом, а символ 'm', розташований після другого роздільника, - це модифікатор.
Основою синтаксису регулярних виразів є той факт, що деякі символи, що зустрічаються в рядку розглядаються не як звичайні символи, а як такі, що мають спеціальне значення (метасимволи). Саме це рішення дозволяє працювати всьому механізму регулярних виразів. Кожен метасимвол має свою власну роль в синтаксисі регулярних виразів. Далі ми розглянемо всі ці метасимволи.
Одним з найважливіших метасимволів є символ зворотного слешу ('\'). Якщо в рядку зустрічається цей символ, то парсер розглядає символ, безпосередньо слідуючий за ним двояко:
- якщо наступний символ в звичайному режимі має яке-небудь спеціальне значення, то він втрачає це своє спеціальне значення і розглядається як звичайний символ. Це абсолютно необхідно для того, щоб мати можливість вставляти в рядок спеціальні символи, як звичайні. Наприклад метасимвол '.', в звичайному режимі означає "будь-який одиничний символ", а '\.' означає просто крапку. Також можна позбавити спеціального значення і сам цей символ: '\\'.
- якщо наступний символ в звичайному режимі не має жодного спеціального значення, то він може набути такого значення, будучи сполученим з символом '\'. Наприклад символ 'd' в звичайному режимі сприймається просто як буква, проте, будучи сполученою із зворотним слешем ('\d') стає метасимволом, що означає "будь-яка цифра".
Існує безліч символів, які утворюють метасимволи в парі із зворотним слешем. Як правило подібні пари використовуються для того, щоб показати, що на цьому місці в рядку повинен знаходитися символ, з кодом, який не має відповідного йому зображення або ж символ, що належить якійсь певній групі символів. Нижче приведені деякі найбільш споживані:
Метасимвол | Значення |
Метасимволи для завдання символів, що не мають зображення | |
\n | Символ переведення рядка (код 0x0A) |
\r | Символ повернення каретки (код 0x0D) |
\t | Символ табуляції (код 0x09) |
\xhh | Вставка символу з шістнадцятковим кодом 0xhh, наприклад \x41 вставить латинську букву 'A' |
Метасимволи для завдання груп символів | |
\d | Цифра (0-9) |
\D | Не цифра (будь-який символ окрім символів 0-9) |
\s | Порожній символ (зазвичай пропуск і символ табуляції) |
\S | Непорожній символ (все, окрім символів, визначуваних метасимволом \s) |
\w | "Словесний" символ (символ, який використовується в словах. Зазвичай всі букви, всі цифри і знак підкреслення '_' |
\W | Все, окрім символів, визначуваних метасимволом \w |
Дата добавления: 2016-04-02; просмотров: 756;