Сначала давайте рассмотрим два специальных символа: '^' и '$'. Они используются для сопоставления начала и конца строки соответственно. Вот примеры:
"^The": соответствует символам, начинающимся с "The" String
"
;отчаяния$": соответствует строке, оканчивающейся на "отчаяния";
"^abc$": соответствует строке, начинающейся с abc и заканчивающейся на abc, фактически ей соответствует только abc;
"notice": соответствует строкам, содержащим уведомление;
вы Видим, что если вы не используете два упомянутых нами символа (последний пример), это означает, что шаблон (регулярное выражение) может появиться в любом месте проверяемой строки, и вы не используете его. Блокировка по сторонам.
Существует также несколько символов «*», «+» и «?», которые используются для обозначения количества или порядка появления символа. Они соответственно обозначают: «ноль или более», «один или более» и. " ноль или один." Вот несколько примеров:
"ab*": соответствует строке, состоящей из a и нуля или более b ("a", "ab", "abbb" и т. д.);
"ab+" : то же, что и выше, но с хотя бы одним b ("ab", "abbb" и т. д.);
"ab?": соответствует 0 или одному b;
"a?b+$": соответствует одному или 0 a, за которым следует Добавить более одного. строка, оканчивающаяся на b.
Вы также можете ограничить количество символов, появляющихся в фигурных скобках, например
"ab{2}": соответствует a, за которым следуют два b (не меньше) ("abb ")
; ": не менее двух b("abb", "abbbb" и т. д.);
"ab{3,5}": 2-5 b("abbb", "abbbb" или "abbbbb").
Вы также должны обратите внимание, что вы всегда должны указывать (т. е. «{0,2}», а не «{,2}»). Аналогично, вы должны отметить, что «*», «+» и «?» — это то же самое, что и «?». следующие три аннотации диапазона: "{0,}", "{1,}" и "{0,1}" соответственно.
Теперь поместите определенное количество символов в круглые скобки, например:
«a(bc)*»: соответствует a, за которым следует 0 или один «bc»;
«a(bc){1,5}»: от одного до 5 «bc». "
также имеет символ '│', который эквивалентен операции ИЛИ:
"hi│hello": соответствует строке, содержащей "hi" или "hello";
"(b│cd)ef": соответствует строке, содержащей "bef" Или строка «cdef»;
«(a│b)*c»: соответствует строке, содержащей несколько (включая 0) a или b, за которыми следует строка c;
точка ('.') может обозначать все отдельные символы:
"a.[0-9]": a, за которым следует символ, за которым следует число (строки, содержащие такую строку, будут совпадать, и эта скобка в будущем будет опущена)
"^.{ 3}$": заканчивается с тремя символами. Содержимое, заключенное в квадратные скобки, соответствует только одному символу
«[ab]»: соответствует одному символу a или b (то же, что и «a│b»);
«[ad]» : соответствует одному символу из '. от a' до 'd' (тот же эффект, что и у "a│b│c│d" и "[abcd]");
"^[a-zA-Z]": соответствует символам, начинающимся с буквы String
"[0-9]"; ]%": соответствует строкам, содержащим x%
, "[a-zA-Z0-9]$": соответствует строкам, заканчивающимся запятой, за которой следует цифра или буква.
Вы также можете поместить ненужные символы в квадратные скобки. . Вам просто нужно использовать '^' в начале скобки (т.е. "%[^a-zA-Z]%" соответствует двум знакам процента с одним внутри. Небуквенная строка,
чтобы можно было это сделать
).интерпретировать, но когда "^.[$()│*+?{" используется как символ со специальным значением, вы должны добавить '' перед этими символами, а в php3 вам следует избегать использования в начале Например, регулярное выражение "($│?[0-9]+" следует называть ereg("( \$│?[0-9 ]+", $str) (я не знаю). узнайте, то же самое ли это в php4)
Не забывайте, что символы внутри квадратных скобок являются исключением из этого правила - внутри квадратных скобок все специальные символы, включая (''), потеряют свои специальные свойства (т.е. "[* +?{}.]" соответствует строкам, содержащим эти символы). Кроме того, как сообщает руководство по регулярным выражениям: "Если список содержит ']', лучше всего использовать его в качестве первого символа в списке. Символ (может следовать за '^'). Если он содержит "-", лучше всего поместить его в начале или конце или во второй конечной точке диапазона (например, [ad-0-9] "-" в
Для полнотыкартины
я должен рассмотреть последовательности сопоставления, классы символов и классы эквивалентности. Но я не хочу вдаваться в подробности этих аспектов, и их не нужно будет рассматривать в этой главе. Дополнительную информацию можно найти на страницах руководства по регулярным выражениям.
Как построить шаблон для сопоставления ввода суммы в валюте
. Теперь мы собираемся использовать то, что мы узнали, чтобы сделать что-нибудь полезное: построить шаблон сопоставления, чтобы проверить, соответствует ли это. входная информация — число, обозначающее деньги. Мы считаем, что существует четыре способа представления суммы денег: «10 000,00» и «10 000,00» или без десятичной части «10 000» и «10 000». Теперь давайте начнем строить этот шаблон соответствия:
^[1-9][. 0 -9]*$
Это означает, что все переменные должны начинаться с цифры, отличной от 0. Но это также означает, что одиночный «0» не может пройти проверку. Вот решение:
^(0│[1-9] [0- 9]*)$
"Соответствуют только 0 и числа, начинающиеся с 0", мы также можем разрешить отрицательный знак перед числом:
^(0│-?[1-9][0-9]*)$
Это это: «0 или число, начинающееся с 0, перед которым может стоять отрицательный знак». Хорошо, хорошо, теперь давайте будем менее строгими и разрешим начинать с 0. Теперь давайте оставим отрицательный знак, потому что мы представляем здесь монеты. нет необходимости использовать его. Теперь мы указываем шаблон для соответствия десятичной части:
^[0-9]+(.[0-9]+)?$
Это означает, что соответствующая строка должна начинаться хотя бы с одного арабского символа. digit . Но обратите внимание, что «10.» не соответствует приведенному выше шаблону, могут соответствовать только «10» и «10.2» (Знаете почему)
^[0-9]+(.[0-9]{ 2. })?$
Выше мы указали, что после запятой должно быть два знака после запятой. Если вы считаете, что это слишком жестко, вы можете изменить его на:
^[0-9]+(.[0-9]{1. ,2})? $
Это позволит использовать один или два символа после десятичной точки. Теперь, когда мы добавляем запятые для удобства чтения (каждая третья цифра), мы можем представить это следующим образом:
^[0-9]{1,3}( ,[ 0-9]{3})*(.[0-9]{1,2})?$
Не забудьте знак плюса '+', который можно заменить знаком умножения '*', если вы хотите разрешить ввод пустых строк (почему?). Также не забывайте, что обратная косая черта '' может вызвать ошибки в строках PHP (очень распространенная ошибка). Теперь, когда мы можем подтвердить строку, мы удалим все. commas str_replace(" , "", $money) Тогда обрабатывайте тип как double, и мы можем выполнять с его помощью математические вычисления.
Создание регулярного выражения для проверки электронной почты.
Давайте продолжим обсуждение того, как проверить адрес электронной почты в целом. адрес электронной почты. Он состоит из трех частей: имя пользователя POP3 (все, что находится слева от «@» ), «@» , имя сервера (это оставшаяся часть). Имя пользователя может содержать прописные и строчные буквы, арабские цифры, точки ('. '), минус ('-') и подчеркивание ('_'). Имена серверов также следуют этому правилу, за исключением подчеркивания.
Теперь имена пользователей не могут начинаться или заканчиваться точками. То же самое относится и к серверам. t иметь два. Между последовательными точками должен быть хотя бы один символ. Теперь давайте посмотрим, как написать шаблон соответствия для имени пользователя:
^[_a-zA-Z0-9-]+$
Существование точек. пока не разрешено. Давайте добавим:
^[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*$
Вышеупомянутое означает: «Начните хотя бы с одного канонического символа». (кроме . случайное) , за которым следуют 0 или более строк, начинающихся с точки. "
Чтобы упростить задачу, мы можем использовать eregi() вместо ereg(). Функция eregi() нечувствительна к регистру, поэтому нам не нужно ее указывать. два диапазона "az" и "AZ" - нужно указать только один:
^[_a-z0-9-]+(.[_a-z0-9-]+)*$
Имя сервера после него одинаковое , но необходимо убрать подчеркивание:
^[a-z0-9-]+(.[a-z0-9-]+)*$
Готово. Теперь просто используйте «@», чтобы соединить две части:
^[_a. -z0-9-]+ (.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*$
Это полная режим соответствия аутентификации электронной почты, нужно только вызвать
eregi('^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[ a-z0-9-] +)*$ ',$eamil),
чтобы узнать, является ли это электронная почта.
Другие варианты использования регулярных выражений
для извлечения строк
ereg() и eregi() имеют функцию, которая позволяет пользователям извлекать часть строки с помощью регулярных выражений (вы можете прочитать руководство для конкретного использования). строка из пути/URL-адреса. Извлеките имена файлов – вам понадобится следующий код:
ereg("([^\/]*)$", $pathOrUrl, $regs);
echo $regs[1];
Расширенные замены
ereg_replace() и eregi_replace() также очень полезны: если мы хотим заменить все разделенные отрицательные знаки запятыми:
ereg_replace("[ nrt]+" , "," , Trim($str));