Man regcomp (3): функции регулярных выражений POSIX. Скачать Reg Organizer - очистка и оптимизация системы Бравый reg comp php
ereg
ereg -- парное значение регулярного выраженияОписание
int ereg (string pattern, string string, array );Ищет парные значения string в регулярном выражении, указанном в pattern .
Если парные значения найдены для подстрок в круглых скобках pattern и функция вызывалась с третьим аргументом regs , то парные значения будут сохранены в элементах regs . $regs будет содержать подстроку, которая начинается с первой левой круглой скобки; $regs будет содержать подстроку, начинающуюся со второй скобки и т.д. $regs будет содержать копию string .
Поиск чуствителен к регистру.
Функция возвращает true, если парное значение для pattern было найдено в string, или false, если не было найдено парных значений или произошла ошибка.
Следующий код извлекает дату в ISO формате и выводит в формате DD.MM.YYYY:
Example 1. ereg() example If (ereg("({4})-({1,2})-({1,2})", $date, $regs)) { echo "$regs.$regs.$regs"; } else { echo "Invalid date format: $date"; } |
ereg_replace
ereg_replace -- заменяет регулярное выражениеОписание
string ereg_replace (string pattern, string replacement, string string);Эта функция сканирует string на парные значения к pattern , затем заменяет найденный текст на replacement .
Если pattern содержит подстроки в круглых скобках, то replacement может содержать подстроки вида \\ цифра , которые будут заменены текстом, совпадающим с цифровой подстрокой в скобках; \\0 обработает все содержимое строки. Может быть использовано до 9 подстрок. Скобки могут быть сгруппированы, в этом случае они считаются по открывающим скобкам. Например, следующий код напечатет "This was a test" три раза:
Пример 1. ereg_replace() $string = "This is a test"; echo ereg_replace(" is", " was", $string); echo ereg_replace("()is", "\\1was", $string); echo ereg_replace("(()is)", "\\2was", $string); |
eregi
eregi -- нечувствительный к регистру поиск парных значений в регулярных выраженияхОписание
int eregi (string pattern, string string, array );eregi_replace
eregi_replace -- замена регулярного выражения без учета регистраОписание
string eregi_replace (string pattern, string replacement, string string);split
split -- разбивает строку на массив по регулярному выражениюОписание
array split (string pattern, string string, int );Возвращает массив строк, каждая из которых является подстрокой строки, образованные разбитием этой строки на части, отделенные друг от друга pattern . Если произойдет ошибка, функция вернет false.
Для получения первых 5 полей из строки в /etc/passwd:
Будет выдано .Эта функция может быть использована организации нечувствительного к регистру сравнения в продуктах, которые поддерживают только чувстуительные к регистру выражения.
Данную статью я решил посветить всем начинающим изучать PHP , потому что у всех возникает одна и та же ошибка. Почему её допускают, не знаю, но допускают постоянно. Я без преувеличений скажу, что получил уже около сотни вопросов, на которые ответ будет дан в этой статье. Эта ошибка связана с неправильным запуском в PHP .
Как делают практически все новички:
- Создают PHP-файл (иногда HTML-файл , но это самые новички).
- Записывают туда PHP-код .
- И двойным кликом пытаются открыть его в браузере.
Результат, браузер код открывает, но исполнять его не торопится. А просто выводит какие-то куски кода обычным текстом, либо вообще ничего не выводит.
Ошибка данного подхода состоит в том, что ученик не понимает, что PHP - это серверный язык , а не клиентский. Это HTML или JavaScript клиентские языки, они, конечно, обрабатываются браузером. Но для PHP нужен интерпритатор . И вот данный интерпритатор запускается сервером.
Вывод: запускать PHP-код надо через сервер . Если у Вас Denwer , значит, через него.
Теперь, как запускать PHP-код через Denwer . Большинство новичков вновь делают ошибку. Они вроде бы всё делают правильно, создают нужные папки, перезапускают Denwer и вроде бы, осталось только правильно вызвать файл. Но тут снова ошибка: они вновь открывают файл просто в браузере (либо перетаскиванием файла в браузер, либо двойным кликом). Это легко можно заметить по адресу в адресной строке. Там будет что-то наподобие: file:///Z:\home\mysite.local\www\script.php .
А правильно запускать надо, вводя адрес виртуального хоста . То есть прямо в адресной строке браузера вводите: http://mysite.local/script.php - всё, теперь скрипт запустится и выведет свой результат.
Надеюсь, данная статья поможет многим новичкам, только начинающим изучать PHP .
#include
#include
int regcomp(regex_t *
preg
, const char *
regex
, int
cflags
);
int regexec(const regex_t *
preg
, const char *
string
, size_t
nmatch
,
regmatch_t
pmatch
, int
eflags
);
size_t regerror(int
errcode
, const regex_t *
preg
, char *
errbuf
,
size_t
errbuf_size
);
void regfree(regex_t *
preg
);
ОПИСАНИЕ
Компилирование регулярных выражений POSIX
Функция regcomp () используется для компиляции регулярного выражения в формат, который подходит для последующих поисков с помощью regexec ().regcomp () передаётся указатель на область хранения буферного шаблона preg , указатель на заканчивающуюся null строку regex и флаги cflags , используемые для определения типа компиляции.
Все поиски регулярных выражений должны выполняться с помощью скомпилированного буферного шаблона, поэтому regexec () должна всегда вызываться с адресом буферного шаблона, инициализированного функцией regcomp ().
Значение cflags может состоять из поразрядного or нуля или нескольких следующих значений:
REG_EXTENDED Использовать синтаксис расширенных регулярных выражений POSIX во время интерпретации regex . Если не включён этот флаг, то используется синтаксис простых регулярных выражений POSIX. REG_ICASE Не учитывать регистр. Последующие поиски regexec () с использованием данного буферного шаблона не будут зависеть от регистра. REG_NOSUB Не сообщать положение совпадений. Параметры nmatch и pmatch для regexec () игнорируются, если данный буферный шаблон был скомпилирован с этим включённым флагом. REG_NEWLINE Операторы совпадения с любым символом не совпадают с символом новой строки.Список несовпадающих символов ([^...] ) без символа новой строки не совпадает с новой строкой.
Оператор сравнения по началу строки (^ ) совпадает с пустой строкой сразу после новой строки независимо от того, что eflags , флаги выполнения regexec (), содержат REG_NOTBOL .
Оператор сравнения по концу строки ($) совпадает с пустой строкой до символа начала строки независимо от того, что eflags содержит REG_NOTEOL .
Сравнение с регулярным выражением POSIX
Функция regexec () используется для сравнения строки, завершающейся null, с предварительно обработанным буферным шаблоном preg . Аргументы nmatch и pmatch используются для предоставления информации о местонахождении любых совпадений. Значение eflags может быть поразрядным ИЛИ одного или обоих значений REG_NOTBOL и REG_NOTEOL . Данные значения определяют поведение процесса сравнения так, как описано ниже. REG_NOTBOL Оператор сравнения по началу строки всегда завершается с ошибкой (но смотрите описанный выше флаг компиляции REG_NEWLINE ). Этот флаг может использоваться, когда в regexec () передаются отдельные части строки, и начало такой строки в данном случае не должно интерпретироваться как начало новой строки. REG_NOTEOL Оператор сравнения по концу строки всегда завершается с ошибкой (но смотрите описанный выше флаг компиляции REG_NEWLINE ).Байтовые смещения
Если REG_NOSUB не установлен при компиляции буферного шаблона, то возможно получать информацию о положении совпадений. Значение pmatch должно быть определено так, чтобы иметь, по крайней мере, nmatch элементов. Они заполняются regexec () адресами внутристрочных совпадений. Смещения подвыражения, начинающегося с i -й открытой скобки, сохраняется в pmatch[i] . Адрес совпадения всего регулярного выражения сохраняется в pmatch (заметим, что чтобы вернуть смещения совпадений N подвыражений, значение nmatch должно быть не менее N+1 ). Любые неиспользованные элементы структуры будут содержать значение -1.Структура regmatch_t
, являющаяся типом pmatch
, определена в
Typedef struct { regoff_t rm_so; regoff_t rm_eo; } regmatch_t;
Каждый элемент rm_so , не равный -1, показывает начальное смещение следующего совпадения наибольшей подстроки внутри заданной строки. Относительный элемент rm_eo указывает на смещение конца совпадения, которое является первым символом после совпавшего текста.
Сообщение об ошибках POSIX
Функция regerror используется для преобразования кодов ошибок, которые могут быть получены от regcomp () и regexec (), в строки сообщений об ошибках.В regerror передаются: код ошибки errcode , буферный шаблон preg , указатель на символьный буфер строки errbuf и размер буфера строки errbuf_size . Функция возвращает размер errbuf , который требуется для сохранения сообщения об ошибке в виде строки, оканчивающейся null. Если и errbuf , и errbuf_size не равны нулю, то errbuf заполняется первыми errbuf_size - 1 символами сообщения об ошибке и завершается байтом null ("\0").
Освобождение буфера шаблона POSIX
Функция regfree () освобождает память, отведённую буферному шаблону preg во время процесса компиляции с помощью regcomp ().ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Функция regcomp () возвращает ноль при успешной компиляции или в противном случае код ошибки.Функция regexec () возвращает ноль при совпадении или REG_NOMATCH , если совпадений не было.
ОШИБКИ
Функция regcomp () может возвращать следующие ошибки: REG_BADBR Неправильное использование оператора обратных ссылок. REG_BADPAT Неправильное использование операторов шаблона, таких, как операторы группы или списка. REG_BADRPT Неправильное использование операторов повторения, например, использование «*» в качестве первого символа. REG_EBRACE Непарные скобки в операторах интервала. REG_EBRACK Непарные квадратные скобки в операторах списка. REG_ECOLLATE Неправильный элемент сортировки. REG_ECTYPE Неизвестное имя класса символов. REG_EEND Потенциальная ошибка. Не определена в POSIX.2. REG_EESCAPE Конечная обратная косая черта. REG_EPAREN Непарные круглые скобки в операторах группировки. REG_ERANGE Неправильное использование оператора области: например, конец области появляется прежде её начала. REG_ESIZE Скомпилированное регулярное выражение требует буферный шаблон размером, большим 64 Кб. Это не определено в POSIX.2. REG_ESPACE Для процедур регулярных выражений закончилась память. REG_ESUBREG Неправильная обратная ссылка на подвыражение.Для начала мы усовершенствуем страничку регистрации, добавив возможность загружать аватар. Исходное изображение должно быть формата jpg, gif или png. Так же оно должно быть не более 2 Мб. Не беспокойтесь, после его сжатия скриптом, размер аватара будет около 3 кб и формат jpg. Откройте страницу reg. php и допишите в теге < form > строчку enctype="multipart/form-data" ,как в примере: