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
Постранічний висновок результату
29.05.2007
Робота з базами даних
29.05.2007