От автора: мне кажется, что немного «однобоко» освещаю тему регулярок. И у некоторых читателей складывается впечатление, что они присутствуют только в PHP. На самом деле регулярные выражения примеры можно найти во многих других языках и программных технологиях. Так что сегодня мы «завернем» совсем другую сторону, и докажем это.
Начнем поближе
Регулярки используются во множестве языков. Понятно, что рассмотреть все их у нас не получится. Поэтому начинаем «поближе»:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Валидация чисел</title> </head> <body> <form name="f"> Ввведите число: <input type="text" name="chislo" size="3" /> <input type="button" value="Проверить" onclick="proverka(chislo.value)" /> </form> <script type="text/javascript"> function proverka(txt) { var r = /[0-9]/; if (r.test(txt)) alert ("Вы ввели число!") else alert ("Вы ввели не число!") } </script> </body> </html> |
Наверное, как вы уже догадались, предыдущий код иллюстрирует использование регулярок в JavaScript. Сильно углубляться в описание примера не буду. Отмечу только, что в этом языке для сравнения входящей строки с паттерном применяется метод test.
Возвращение в PHP
Теперь на время возвратимся на «родную дорожку». Пример, истину раскрывающий:
1 2 3 4 5 6 7 8 |
<?php $str="строки 123 строки"; if(preg_match("/\d/",$str)) { echo "В тексте есть цифры"; } else echo "В тексте нет чисел"; ?> |
В этом коде мы упростили нашу регулярку с помощью метасимвола \d, который обозначает «все цифры». И в первом, и во втором примере мы использовали регулярные выражения, совместимые с Perl или PCRE.
Они обладают несколькими важными преимуществами, главными из которых является высокая скорость обработки и глобальное распространение. Если сравнить два приведенных выше кода, то видно, что используются одинаковые по синтаксису регулярки.
Это значит, что разработчику достаточно один раз выучить синтаксис PCRE. А затем можно применять их в различных программных дисциплинах. В отличие от UNIX-совместимых регулярных выражений, синтаксис которых считается устаревшим. Хотя они еще и используются в некоторых утилитах наподобие grep. Но в эти дебри мы не будем совать свой нос :).
Еще один тип
Регулярки бывают разные… Кроме описанных существует еще один тип регулярных – POSIX. Это набор стандартов (один общий стандарт), обеспечивающий «переносимость» программного кода между ОС на основе UNIX.
Но нам повезло, поскольку POSIX по своему синтаксису почти не отличается от PCRE. В последнем типе реализована поддержка метасимволов и еще нескольких «облегчалок». Если интересно, то ознакомьтесь с данной темой самостоятельно. Кстати, в Oracle СУБД используется POSIX.
Теперь опять вернемся в родную «стихию». Вот вам пример из другой системы:
1 |
SELECT `GNPOld` FROM `country` WHERE `GNPOld`REGEXP '[0-9]' |
Это наша родная СУБД. В ней также используются регулярки. В MySQL поддерживается синтаксис, «закрепленный» в POSIX. Шаблон регулярного выражения в запросе SQL указывается сразу после оператора REGEXP. Он же RLIKE. То есть предыдущий запрос можно использовать и в таком варианте:
1 |
SELECT `GNPOld` FROM `country` WHERE `GNPOld`RLIKE '[0-9]' |
И это не вызовет никаких проблем в виде сообщений об ошибках синтаксиса от СУБД.
Думаю, пока хватит лазить по «чужим» дебрям. Если руки очень чешутся, то можете попутно самостоятельно просветиться о применении регулярок в Java. Но это уже на любителя :).