Від автора: мені здається, що трохи «однобоко» висвітлюю тему регулярок. І у деяких читачів складається враження, що вони присутні тільки в PHP. Насправді регулярні вирази приклади можна знайти у багатьох інших мовах і програмних технологіях. Так що сьогодні «ми загорнемо» зовсім іншу сторону, і доведемо це.
Почнемо ближче
Регулярки використовуються в безлічі мов. Зрозуміло, що розглянути всі їх у нас не вийде. Тому починаємо «ближче»:
Валідація чисел
Введіть число:
function xyz(txt) {
var r = /[0-9]/;
if (r.test(txt))
alert (“Ви ввели число!”)
else
alert (“Ви ввели не число!”)
}
Напевно, як ви вже здогадалися, попередній код ілюструє використання регулярок в JavaScript. Сильно заглиблюватися в опис прикладу не буду. Зазначу тільки, що в цій мові для порівняння вхідної рядки з паттерном застосовується метод test.
Повернення в PHP
Тепер на час повернемося на «рідну доріжку». Приклад, розкриває істину:
У цьому коді ми спростили нашу регулярку з допомогою метасимвола \d, який позначає «всі цифри». І в першому, і в другому прикладі ми використовували регулярні вирази, сумісні з Perl або PCRE.
Вони володіють декількома важливими перевагами, головними з яких є висока швидкість обробки і глобальне поширення. Якщо порівняти два наведених вище коду, то видно, що використовуються однакові по синтаксису регулярки.
Це означає, що розробнику достатньо один раз вивчити синтаксис PCRE. А потім можна застосовувати їх у різних програмних дисциплінах. На відміну від UNIX-сумісних регулярних виразів, синтаксис яких вважається застарілим. Хоча вони ще і використовуються в деяких утилітах зразок grep. Але в ці нетрі ми не будемо пхати свій ніс .
Ще один тип
Регулярки бувають різні… Крім описаних існує ще один тип регулярних – POSIX. Це набір стандартів (один загальний стандарт), що забезпечує «переносимість» програмного коду між ОС UNIX.
Але нам пощастило, оскільки POSIX за своїм синтаксису майже не відрізняється від PCRE. В останньому типі реалізована підтримка метасимволів і ще кількох «облегчалок». Якщо цікаво, то ознайомтеся з даною темою самостійно. До речі, в Oracle СУБД використовується POSIX.
Тепер знову повернемося в рідну «стихію». Ось вам приклад з іншої системи:
SELECT `GNPOld` FROM `country` WHERE `GNPOld’REGEXP ‘[0-9]’
Це наша рідна СУБД. В ній також використовуються регулярки. В MySQL підтримується синтаксис, «закріплений» у POSIX. Шаблон регулярного виразу в SQL-запиті зазначається безпосередньо після оператора REGEXP. Він же RLIKE. Тобто попередній запит можна використовувати і в такому варіанті:
SELECT `GNPOld` FROM `country` WHERE `GNPOld’RLIKE ‘[0-9]’
І це не викличе жодних проблем у вигляді повідомлень про помилки синтаксису від СУБД.
Думаю, поки вистачить лазити по «чужим» нетрями. Якщо руки дуже сверблять, то можете попутно самостійно просветиться про застосування регулярок в Java. Але це вже на любителя .