Практична робота №6 Регулярні вирази в php
Загальна інформація
Регулярний вираз (regular expression, regexp, регексп) - механізм, що дозволяє задати шаблон для рядка і здійснити пошук даних, відповідних цьому шаблону в заданому тексті. Крім того, додаткові функції по роботі з РВ дозволяють отримати знайдені дані у вигляді масиву рядків, провести заміну в тексті за шаблоном, розбиття рядка за шаблоном і тому подібне Проте головною їх функцією, на якій засновані всі останні, є саме функція пошуку в тексті даних, відповідних шаблону, описаному в синтаксисі регулярних виразів.
Дуже часто регулярні вирази використовуються для того, щоб перевірити, чи є даний рядок рядком в необхідному форматі. Наприклад наступний regexp призначений для перевірки того, що рядок містить коректну e-mail адресу:
/^w+([.w]+)*w@w((.w)*w+)*.w{2,3}$/
Регулярні вирази прийшли до нас з Unix і Perl. У PHP існує два різні механізми для обробки регулярних виразів:
POSIX і Perl-сумісні. Їх синтаксис багато в чому схожий, проте Perl-сумісні регулярні вирази потужніші і, до того ж, працюють набагато швидше (в деяких випадках до 10 разів швидше).
Суттю механізму регулярних виразів є те, що вони дозволяють задати шаблон нечіткого пошуку по тексту. Наприклад, якщо перед вами стоїть завдання знайти в тексті певне слово, то з цією задачай добре справляються і звичайні функції роботи з рядками. Наприклад, необхідно знайти в тексті інформацію, про яку вам відомо тільки те, що це "3 або 4 цифри після яких через пропуск йде 5 заголовних латинських букв", то ви зможете зробити це дуже просто, за допомогою наступного регулярного виразу:
/d{3,4}s[A-Z]{5}/
Синтаксис регулярних виразів
Регулярні вирази, як вже було сказано вище, є рядком.
Рядок завжди починається з символу роздільника, за яким слідує безпосередньо регулярний вираз, потім ще один символ роздільника і потім список модифікаторів. Як символ роздільника зазвичай використовується слеш ('/'). Таким чином в наступному регулярному виразі: /d{3}-d{2}/m символ '/' є роздільником, рядок 'd{3}-d{2}' - безпосередньо регулярним виразом, а символ 'm', розташований після другого роздільника - це модифікатор.
Основою синтаксису регулярних виразів є той факт, що деякі символи, що зустрічаються в рядку розглядаються не як звичайні символи, а як що мають спеціальне значення (т.з. метасимволи). Саме це рішення дозволяє працювати всьому механізму регулярних виразів. Кожен метасимвол має свою власну роль в синтаксисі регулярних виразів.
Існує безліч символів, які утворюють метасимволи в парі із зворотним слешем. Як правило подібні пари використовуються для того, щоб показати, що на цьому місці в рядку повинен знаходитися символ, з кодом, який не має відповідного йому зображення або ж символ, що належить якійсь певній групі символів. Нижче приведені деякі найбільш вживані.
Шаблон |
Відповідність |
x? |
нуль або один символ ‘x’ |
x* |
нуль або більше символів ‘x’ |
x+ |
один або більше символів ‘x’ |
.* |
нуль або більше будь-яких символів |
.+ |
один або більше будь-яких символів |
{m} |
‘m’ символів |
[] |
символи, взяті в [] |
[^] |
символи, окрім взятих в [] |
[0-9] |
будь-яка цифра від ’0′ до ’9′ |
[a-z] |
будь-яка буква від ‘a’ до ‘z’ |
[^0-9] |
будь-який символ, який не знаходиться між ’0′ та ’9′ |
[^a-z] |
будь-який символ, який не знаходиться між ‘a’ та ‘z’ |
/^…/ |
перший символ в рядку |
/…$/ |
останній символ в рядку |
\d |
одна цифра, те саме, що і [0-9] |
\d+ |
одна або більше цифр, те саме, що і [0-9]+ |
\D |
одна не-цифра, те саме, що і [^0-9] |
\D+ |
одна або більше не-цифр, те саме, що і [^0-9]+ |
\w |
один alphanumeric символ (латинска буква або цифра), те саме, що і [a-zA-Z0-9] |
\w+ |
один або більше alphanumeric-символів, те саме, що і [a-zA-Z0-9]+ |
\W |
один не-alphanumeric символ, те саме що і [^a-zA-Z0-9] |
\W+ |
один або більше не-alphanumeric символ, те саме що і [^a-zA-Z0-9]+ |
\s |
один space символ (пробіл, табуляція, новий рядок), те саме що і [\n\t\r\f] |
\s+ |
один або більше space символів, те саме що і [\n\t\r\f] |
\S |
один не-space символ, те саме що і [^\n\t\r\f] |
\S+ |
один або більше не-space символів, те саме що і [^\n\t\r\f]+ |
a|b|c |
‘a’ або ‘b’ або ‘c’ |
abc |
підрядок “abc” |
(pattern) |
() запам’ятовуе группу символів, призначаючи їх змінним $1, $2 і т.д. Див. приклади нижче. |
/pattern/i |
ігнорувати регістр букв |
Приклад |
Опис |
~/php/; |
перевіряє, чи є в рядку $str підрядок “php” |
~/^php/; |
перевіряє, чи починається рядок із підрядка “php” |
~/php$/; |
перевіряє, чи закінчується рядок на підрядок “php” |
~/c|g|i/; |
перевіряє, чи містить рядок символ ‘c’ або ‘g’ або ‘i’ |
~/cg{2,4}i/; |
перевіряє, чи містить рядок символ ‘c’, слідуючі відразу за ним 2-4 символи ‘g’, за якими слідує символ ‘i’ |
~/cg*i/; |
перевіряє, чи містить рядок символ ‘c’, слідуючі за ним 0 або більше символів ‘g’, за якими слідує символ ‘i’ |
~/c..i/; |
перевіряє, чи містить рядок символ ‘c’, і символ ‘i’, розділені двома будь-якими буквами |
~/[cgi]/; |
перевіряє, чи містить рядок один із символів ‘c’, ‘g’ або ‘i’ |
~/\d/; |
перевіряє, чи містить рядок цифру |
~/\W/; |
перевіряє, чи містить рядок символи, які не є буквами латинського алфавіта та цифрами |
Завдання
1. Розробити скрипт реєстрації користувачів, що обробляє дані форми. Необхідно передбачити попередню перевірку на коректність заповнення даних. Обов’язково передбачити перевірку всіх полів введення. Отримані дані записати у файл даних.
2. Створити скрипт, що обробляє html-файл та виводить у таблицю всі гіперпосилання та відповідні їм ідентифікатори.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.