Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
php учебник_весь.doc
Скачиваний:
8
Добавлен:
21.09.2019
Размер:
2.06 Mб
Скачать

Соответствие началу и концу строки

В регулярном выражении можно указать, должно ли конкретное подвыражение встречаться в начале, в конце строки или и в начале и в конце строки.

Символ ^ соответствует началу строки:

"^xy"

Такое выражение соответствует любой строке, начинающейся с xy. Обратите внимание, что в этом случае символ ^ ставится за пределами выражения в скобках, к примеру:

"^[a-z]"

Знак доллара $ соответствует концу строки:

"xy$"

Это регулярное выражение соответствует любой строке, заканчивающейся на xy.

Сопоставление со специальными символами

В тех случаях, когда нужно сопоставить выражение строке, в которой встречаются спецсимволы, о которых говорилось выше в этой главе, такие как $, ^, { и т. д., перед ними ставится символ обратной косой черты (\). Например, для того, чтобы найти в строке символ $, в регулярном выражении нужно написать "\$".

В тех случаях, когда перед символом стоит обратная косая черта, говорят, что символ записан в виде escape-последовательности.

То же самое относится и к самому символу обратной косой черты. Если нужно провести сопоставление с символом обратной косой черты, то в этом случае ставится две обратных косых черты, т. е. \\.

Классы символов

Классами символов называются сокращенные обозначения для предопределенных символов.

  • Класс [[:alnum:]] - буквенно-цифровые символы

  • Класс [[:digit:]] - десятичные цифровые символы

  • Класс [[:xdigit:]] - шестнадцатеричные цифровые символы

  • Класс [[:alpha:]] - буквенные символы

  • Класс [[:upper:]] - прописные буквенные символы

  • Класс [[:lower:]] - строчные буквенные символы

  • Класс [[:punct:]] - знаки пунктуации

  • Класс [[:space:]] - символы пробела

  • Класс [[:blanc:]] - символы табуляции и пробела

  • Класс [[:print:]] - печатные символы

  • Класс [[:cntrl:]] - управляющие символы

  • Класс [[:graph:]] - печатные символы, за исключением пробельные

Вы можете использовать классы символов в регулярных выражениях точно также как и остальные символы. К примеру:

  • Эквивалентом выражения "[a-zA-Z_0-9]" является выражение "[[:alnum:]]";

  • Выражению "[0-9]" эквивалентно выражение "[[:digit:]]"

  • Выражению "[a-Z]" эквивалентно регулярное выражение "[[:alpha:]]".

Функции для работы с регулярными выражениями

PHP поддерживает два вида записи регулярных выражений: POSIX и Perl. POSIX расшифровывается как Portable Operating System Interface (интерфейс переносной операционной системы) и является стандартом для интерфейсов приложений. В этом разделе мы будем работать с регулярными выражениями в стиле POSIX, а позже рассмотрим Perl-совместимые регулярные выражения.

В общем случае, функции для работы с регулярными выражениями выполняются более медленно, чем строковые функции, предоставляющие аналогичные возможности. Поэтому, если можно без ущерба для эффективности приложения использовать строковые функции, их следует использовать.

ereg()

bool ereg(string pattern, string string [, array regs])

Данная функция ищет в строке string соответствие регулярному выражению, заданному в шаблоне pattern. Если соответствия подвыражений с шаблоном будут найдены, то они сохраняются в массиве соответствий regs. При этом$regs[0] содержит копию строки string, $regs[1] содержит подстроку, начинающуюся с первой левой скобки, $regs[2] хранит подстроку, начинающуюся со второй левой скобки и т.д.

Ниже приведен код, преобразующий дату из формата YYYY-MM-DD в формат DD.MM.YYYY.

<?

$date = "2003-03-21";

if (ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $date, $regs))

{

echo "$regs[3].$regs[2].$regs[1]";

}

else

{

echo "Неверный формат даты: $date";

}

?>

ereg_replace()

string ereg_replace(string pattern, string replacement, string string)

Эта функция заменяет найденный в строке string шаблон pattern на строку replacement и, если соответствие было найдено, возвращает модифицированную строку.

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

<?

$number = "1952";

$str = "Он родился в пятьдесят втором.";

echo("до замены:$str");

$str = ereg_replace("пятьдесят втором", $number, $str);

echo("<br> после замены: $str");

?>

Результат:

до замены: Он родился в пятьдесят втором.

после замены: Он родился в 1952.

eregi()

bool eregi (string pattern, string string[, array regs])

Эта функция идентична функции ereg, за исключением того, что она игнорирует регистр.

eregi_replace()

string eregi_replace (string pattern, string replacement, string string)

Функция аналогична функции ereg_replace, за исключением того, что она является нечувствительной к регистру.

split()

array split (string pattern, string string [, int limit])

Эта функция возвращает массив строк, которые представляют собой подстроки строки string, образованные в результате разделения строки string на подстроки в соответствии с регулярным выражением pattern. Если указан необязательный параметр limit, то в возвращаемом массиве будет не больше limit элементов, последний из которых содержит неразделенную часть строки.

Эта функция полезна при разделении дат, доменных имен и т.д.

К примеру:

<?

$url = "www.softtime.ru";

$array = split ("\.", $url);

foreach($array as $index => $val)

{

echo("$index -> $val <br />");

}

?>

Результат:

0 -> www

1 -> softtime

2 -> ru

То же самое можно проделать с датой:

<?

$date = "10-12-2003";

$array = split ("-", $date);

foreach($array as $index => $val)

{

echo("$index -> $val <br />");

}

?>

Результат:

0 -> 10

1 -> 12

2 -> 2003

spliti()

array spliti (string pattern, string string [, int limit])

Эта функция аналогична функции split, за исключением того, что является нечувствительной к регистру.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]