ru en uk

  авторизація

(044) 362 48 16   (098) 294 41 60


   Цены

   |      |      |   

Регулярні вирази в Perl

Регулярні вирази використовуються для знаходження шаблонів у рядках. Наприклад, для того, щоб знайти в телефонній книзі конкретне ім'я, або, наприклад, всі імена, починаючиающіеся з літери 'a'. Робота з регулярними виразами є однією з найбільш потужних і корисних, і в той же час самих складних для розуміння особливостей Perl. Сподіваємося, що після прочитання цієї статті ви зрозумієте, наскільки це потужний і зручний інструмент. Отримавши певний досвід ви зможете використаннять ці можливості з великою користю для себе.
Оператори

Для роботи з регулярними виразами в Perl використовуються три оператора
- Оператор порівняння (matching - m / /), оператор підстановки
(substitution s / / /) та оператор переказу (translation - tr / //).

Всі три оператора використовують змінну $ _ за замовчуванням, тому
далі, поки не будуть представлені операції = ~ і! ~, будем
користуватися нею.

Оператор порівняння перевіряє, чи підходить перевіряємо вираз під
шаблон, іповертає значення 1, якщо це так, і значення 0 у
іншому випадку. Запис цього оператора складається з літери m,
роздільник (найчастіше це косая лінія - /, але в принципі це може
бути майже будь-який символ), шаблону і ще одного роздільник (такого ж,
як і перший:).

Оператор порівняння
$ _ =;
if (m / hello /) (
print "hello user n";
)

if ($ input ( 'siteurl') = ~ # http:// #) (
print $ input ( 'siteurl');
)

У цьому прикладі перевіряється, чи є у рядку, отриманої з
стандартного входу, слово 'hello'. Якщо це так (оператор m / / поверне
значення 1), то на стандартний вихід повернеться фраза 'hello user'.

Примітка: взагалі-то символ 'm' є необов'язковим, тому
оператор з цього прикладу може виглядаєеть просто як / hello /.

Оператор підстановки знаходить у рядку всі підстроками, що задовольняють
шаблону, і заміняє їх деяким іншим значенням. Запис цього
оператора складається з букви s, що вказує на те, що це власне
оператор підстановки та вихідніого (що заміняти) і подстановочного (на
що заміняти) шаблонів, розділених роздільниками.

Оператор підстановки
$ _ = 'My name is Fred';
# Oh no, my name is Jonathan!
s / Fred / Jonathan /;

У цьомуприкладі в рядку $ _ всі слова Fred будуть змінені на Jonathan.

Оператор перекладу також виробляє підстановки, але дещо іншого
характеру - він використовується для заміни окремих символом деякими
іншими (визначеними) символами. Синтаксис цього оперативнимира схожий на
синтаксис оператора підстановки, з тим відмінністю, що по-перше він
очевидно починається з літер tr, а між роздільниками вставляються НЕ
шаблони, а групи символів, перший - вихідні символи, друга --
подстановочние, причому відповідні символи повинні стояти на
продінакових позиціях у своїх групах - якщо ви хочете замінити,
наприклад латинську 'm' на Кирилиця 'м', вони повинні стояти на
однакових місцях: 'm' - у першій групі символів, 'м' - у другій.

Оператор перекладу
$ _ = 'Hi.there, My.name.is.jonathan, ';
tr /., /! /;

У цьому прикладі всі коми будуть змінені на знаки оклику, а
точки - на пробiли.

Модифікатори

Можливості кожного з ціх операторів можна розширити за допомогою
модифікаторів. Модифікатори - це грубо кажучи символи які
дописувати до оператора (наприклад, так - s / fred / Jonathan / i), говорячи про
те, як йому потрібно розбирати робоче значення.

Модифікатори для оператора порівняння:
g - знаходить всі знайдені підстроками;
i - ігнорує регістр символів у рядку;
m - розглядає рядок як багаторядкових значення;
s - розглядає рядок як однострочое значення;
x - дозволяє використовувати розширені регулярні вирази;

Модифікатори для оператора підстановки:
e - обчислює подстановочное вираз перед підстановки;
g - знаходить всі знайдені підстроками;
i - ігнорує регістр символів у рядку;
m - розглядає рядок як багаторядкових значення;
s - розглядає рядок як однострочое значення;
x - дозволяє використовувати розширені регулярні вирази.

Модифікатори

$ _ = 'My name is Fred';
s / fred / Jonathan / i; # My name is Jonathan
s / jonathan / routine () / ie; # My name is [something]
Операції = ~ і! ~

Операції = ~ і! ~ дозволяють використовувати з операторами m / /, s / / / і
tr / / / будь-які змінні, а не тільки $ _, яка використовується цими
операторами за замовчуванням.

Оператор = ~ </ strong> виконує ті ж функції, що й оператор присвоювання '='
(у разі використання з операторами s / / / і tr / / /) та оператор
порівняння 'eq' (при використанні з оператором m / /).

Операція = ~
$ name = 'my name is Fred';

$ string = 'hello world';
if ($ string = ~ / hello / i) (
print 'helloworlded in this string.';
)

Аналогічно, операція! ~ Використовується так само як і операція 'ne' (її
написання подібно операціі чисельного порівняння! =), використовується
тільки з оператором порівняння і означає заперечення задоволення
шаблоном.

Операція! ~
$ string = 'good';
if ($ string! ~ / bad /) (
print "hey, it's not too bad yet!";
) </ p>

Пам'ять

І наостанок - про можливості більш зручно працювати з результатами
обробки регулярних виразів, а саме про зберіганні їх в окремих
змінних. Такими змінними є існуючі$ & $ `, $ ', І
набір змінних $ 1, $ 2, ..., $ 9.

Змінна $ &

Ця мінлива призначена для зберігання фрагмента рядка, який
задовольнив шаблону, заданому регулярним виразом. Це зручно в
таких слудеяких випадках, як, наприклад, якщо потрібно знайти число в рядку, але
невідомо, що це за число. Ось як це може виглядати:

$ string = "error 404."
$ string = ~ m / d + /;
$ number = $ &; # $ number містить "404"

Змінні $ `и $ '
Ці змінні служать для зберігання фрагментів, які не
удовлетворили шаблону, а саме підстроками, які стоять до і після
результату відповідно. Іншими словами, після операції, наприклад,
порівняння, значення результатом рядка розділяється натри частини - частина,
яка підійшла під шаблон, і фрагменти, які йдуть перед нею і
після неї. Ці частини і поміщаються в змінні $ &, $ `и $ '
відповідно. (Зверніть увагу на те, що в першій змінної --
зворотній лапках, а у другій - пряма). Подивимося на попередній
приклад.

$ string = "error 404."
$ string = ~ m / d + /;

$ number = $ &; # $ number містить "404"
$ before = $ `; # $ before містить" error "
$ after = $ '; # $ after містить "."
Змінні $ 1 .. $ 9

Ці змінні служать для зберіганняфрагментів рядки, які
удовлетворили відповідний певним фрагментах шаблону. В
шаблоні фрагменти виділяються за допомогою дужок. Кожному фрагменту
виділяється номер в тому порядку, в якому вони розташовані, та
відповідна змінна буде містити його значення.
$ string = "this is to be uppercased";
$ string = ~ s / (upper w +) / uc ($ 1) /;
# $ String = "this is to be UPPERCASED"

$ string = "15 apples, 2 foos, 3 bars";
while ($ string = ~ m / ( d +) ( w +) / g) (
print "$ 2: $ 1 n";
)
# Виведе apples: 15
# Foos: 2
# Bars: 3


 
Як надіслати пошту
29.05.2007
Якщо Вам потрібно надіслати повідомлення адміністратору, користувачеві, зробити розсилку, відправити звіт електронною поштою, то простіше за все це зробити за допомогою вбудованої функції mail ()...
Постранічний висновок результату
29.05.2007
Введення в PHP5
29.05.2007
PHP5 ще офіційно не вийшов, але "робітники" версії вже працездатності (так само як і нестабільні!), Так що ми цілком можемо почати вивчення нових можливостей прийдешнього релізу PHP і попрактикуватися з ними. У цій статті ми поговоримо про три основних нововведення в PHP5

 

Rambler's Top100