Подготовка к Zend сертификации : Строки и и регулярные выражения

Строки и шаблоны

Строки - основы

  • выделяются одинарными или двойными кавычками
  • двойные кавычки применяются в случае парсинга переменных или использования специальных символов (\n). На скорость обработки данных не влияет
  • strlen($string) - возвращает длину строки, а именно количество байт, а не символов
  • str_word_count($string, $format, $charlist) - возвращает количество слов, $format (0 - возврат количества слов, 1 - массив из всех слов, 2 - ассоциативный массив, где в качестве ключей - положение в строке (индекс)), $charlist - список символов, из которых может состоять слово (то есть 3 - слово fri3nd будет посчитано).
  • count_chars($string, 1) - считает количество вхождений символов, 1 - режим, возвращает массив со всеми символами (0 - возвращает символы, не входящие в строку).
  • soundex($string) // высчитывает soundex ключ строки (строка длинной в 4 символа, начинающаяся с буквы), для поиска по произношению, например, soundex(“Euler”) == soundex(“Ellery”); // E460
  • metaphone($string, $phonemes) - высчитывает metaphone ключ для строки (является более точным сравнением чем soundex(), так как в ней учитываются правила произношения в английском языке, сгенерированные ключи разной длины), $phonemes ограничивает список возвращаемых символов.
  • trim($string, $optional_char_list) - убирает пробелы из начала и окончания строки (space/tab/newline); если задан $optional_char_list, то указанные символы так же удаляются.
  • ltrim($string, $optional_char_list) - удаляет пробелы из начала строки.
  • rtrim($string, $optional_char_list) - аналог chop(), удаляет пробелы с конца строки.

Сравнение строк

  • $string1 == $string2 - сравнение с приведением типов
  • $string1 === $string2 - сравнение с учетом типа данных
  • strcmp($string1,$string2) - регистрозависимое сравнение, возвращает < 0 если str1 меньше str2; > 0 если str1 больше str2, и 0 если они равны (=== 0)
  • strcasecmp($string1,$string2) - сравнение без учета регистра
  • strncasecmp($string1,$string2,$length) - $length длина строки для сравнения
  • similar_text($string1,$string2[,$percentage]) - возвращает количество совпадающих символов, если был передан третий параметр, то эта перемена получит процент совпавших символов ($percentage)
  • levenshtein($string1,$string2) - расстояние Левенштайна между строками, то есть минимальное число символов, которые потребуется заменить/удалить/добавить чтобы получить идентичные строки, применяется для грубого нахождения ошибочных слов. Например, levenshtein(“ca”,”cn”) == 1

Форматирование строк

  • localeconv() - массив, содержащий информация для форматирования строк с учетом локали.
  • nl_langinfo($item) - возвращает информацию о языке и локали
  • setlocale ( LC_ALL, ”zh-hk”) - устанавливает локаль для функций, работающих с ней.
  • number_format ($number) - возвращает отформатированное число
  • money_format ($format, $number) - money_format() не существует в Windows.
  • quotemeta($string)- добавляет обратный слеш перед следующими символами: . \ + * ? [ ^ ] ( $ )
  • htmlspecialchars($string) - переводит &,”,’,<,> в HTML элементы, то есть "
  • htmlspecialchars_decode($string) - переводит элементы из предыдущей функции в специальные символы
  • htmlentities($string,FLAGS) - переводит все, что можно в HTML элементы, необходимо только если ваша страница в одной из следующих кодировок ASCII или LATIN-1, но не UTF-8.
  • html_entity_decode ($string) - переводит все HTML элементы в строки
  • get_html_translation_table(HTML_ENTITIES | HTML_SPECIALCHAR) - возвращает таблицу перевода для htmlspecialchars() и/или htmlentities(), по-умолчанию - для обоих функций
  • strip_tags($string,$allowable_tags) - удаляет все открывающие и закрывающие теги (за исключением $allowable_tags) из строки
  • nl2br($string) - переводит символ новой строки в <br>
  • wordwrap ($string,$length,$break_symbol,$breakwords); - добавляет $break_symbol или, по-умолчниаю, "\n" через каждые $length, если $breakwords установлена в TRUE, то слова будут разбиваться (по-умолчанию FALSE)
  • ucfirst ($string); - перевод первого символа в верхний регистр
  • lcfirst ($string); - перевод первого символа в нижний регистр
  • strtoupper ($string); - перевод строки в верхний регистр
  • strtolower ($string); - перевод строки в нижний регистр
  • ucwords ($string);- перевод первого символа каждого слова в строке
  • bin2hex ($string); hex2bin ($string); - перевод бинарных данных в шестнадцатеричный формат (ASCII представление), и наоборот
  • convert_cyr_string($string); - перевод из одного набора кириллических символов в другой
  • hebrev($string); - Преобразует текст на иврите из логической кодировки в визуальную (только для rtl текста)
  • hebrevc ($string); - Преобразует текст на иврите из логической кодировки в визуальную с преобразованием перевода строки
  • chr($ascii); - возвращает специальный символ, то есть chr(10) -> \n
  • ord($string); - возвращает ASCII значение, то есть ord(“\n”) -> 10
  • convert_uuencode($string); - кодирует строку с использованием uuencode алгоритма, переводя строки в печатуемые символы, примерно на 35% больше от оригинала
  • convert_uudecode($string); - декодирует
  • base64_encode($string); - кодирует с применением base64 алгоритма, примерно на 33% больше от оригинада
  • base64_decode($string); - декодирует
  • quoted_printable_encode($string);- PHP 5.3 Кодирует 8-битную строку в с помощью метода quoted-printable для использования в MIME
  • quoted_printable_decode($string); - декодирует
  • print ($string); или print “$string”; - всегда возвращает 1
  • printf ($format, $args, …); - выводит отформатированную строку, возвращает длину выведенной строки, то есть $str = printf(‘Hello %s‘,’Edward’); печатает Hello Edward, $str == 12
  • sprintf ($format, $args); // возвращает отформатированную строку
  • vprintf ($format, $array_args); // выводит отформатированную строку, принимает массив в качестве аргумента
  • vsprintf (); // возвращает отформатированную строку, принимает массив в качестве аргумента
  • fprintf ($handle, $format, $args); // передает отформатированную строку ресурсу, например, при записи строки в открытый файл
  • sscanf ($string, $format, $optional_args); // читает из $string и форматирует в соответствии с $format в качестве массива, если $optional_args передан, то значения $format будут назначены $optional_args
  • fscanf ($handle, $format, $optional_args); // читает из ресурса, например, из файла, при каждом вызове читается одна строка
  • str_pad ($string,$length,$optional_padding_character); // Дополняет строку другой строкой до заданной длины

Примеры

<?php

$format = 'The %2$s contains %1$04d monkeys'; // 2$=>the second argument, 04d=>with 4 digits
echo printf($format, $num, $location); // The tree contains 0005 monkeys
$s = 'monkey'; $t = 'many monkeys';
printf("[%s]\n",$s); // standard string output [monkey]
printf("[%10s]\n",$s); // right-justification with spaces [    monkey]
printf("[%-10s]\n",$s); // left-justification with spaces [monkey    ]
printf("[%010s]\n",$s); // zero-padding works on strings too [0000monkey]
printf("[%'#10s]\n",$s); // use the custom padding character '#' [####monkey]
printf("[%10.10s]\n",$t); // left-justification but with a cutoff of 10 characters [many monke]

$number = 1234.56;
setlocale(LC_MONETARY, 'en_US');
$money_format = money_format('%i', $number) . "\n"; // USD 1,234.56
$english_format_number = number_format($number, 2, '.', ','); // 1,234.56

$test = "string 1234 string 5678";
$result = sscanf($test, "%s %d %s %d"); // $result = array('string','1234','string','5678');

Параметры формата функции printf()

  • % - символ процента. Аргумент не используется.
  • b - аргумент трактуется как целое и выводится в виде двоичного числа.
  • c - аргумент трактуется как целое и выводится в виде символа с соответствующим кодом ASCII.
  • d - аргумент трактуется как целое и выводится в виде десятичного числа со знаком.
  • e - аргумент трактуется как число в в научной нотации (например, 1.2e+2). Описатель точности указывает на количество знаков после запятой, начиная с версии PHP 5.2.1. В более ранних версиях он обозначал количество значащих цифр (на один знак меньше).
  • E - аналогично %e, но использует заглавную букву (например, 1.2E+2).
  • u - аргумент трактуется как целое и выводится в виде десятичного числа без знака.
  • f - аргумент трактуется как число с плавающей точкой и также выводится в зависимости от локали.
  • F - аргумент трактуется как число с плавающей точкой и также выводится, но без зависимости от локали. Доступно, начиная с версии PHP 4.3.10 и PHP 5.0.3.
  • o - аргумент трактуется как целое и выводится в виде восьмеричного числа.
  • s - аргумент трактуется как строка.
  • x - аргумент трактуется как целое и выводится в виде шестнадцатиричного числа (в нижнем регистре).
  • X - аргумент трактуется как целое и выводится в виде шестнадцатиричного числа (в верхнем регистре).

Экранирующие последовательности

  • \n перевод строки (LF или 0x0A (10) в ASCII)
  • \r возврат каретки (CR или 0x0D (13) в ASCII)
  • \t табуляция (HT или 0x09 (9) в ASCII)
  • \ обратный слеш
  • \$ знак доллара
  • \” двойные кавычки
  • [0-7]{1,3} последовательность символов, совпадающих с регулярным выражением.

Функции

substr($string, $start, $length) – возвращает подстроку начина с $start длиной $length – отрицательный $start отсчитывается с конца строки – отрицательный $length отсчитывается с конца строки – возвращает FALSE в случае ошибки или пустой строки

substr_compare($string1, $string2, $offset, $length, $case-insentivity) – бинарно безопасное сравнение двух строк начиная с $offset и длиной $length – возвращает 0 если строки равны

substr_count($haystack, $needle, $offset) – возвращает число повтроений подстроки

substr_replace($string, $replacement, $start, $length) – заменяет часть строки

strstr($haystack, $needle, TRUE | FALSE) - TRUE если до, FALSE включая $needle и далее

stristr($haystack, $needle, TRUE | FALSE) - без учета регистра strchr($haystack, $needle, TRUE | FALSE ) – возвращает часть $haystack после(и включая) или до первого появления $needle – например $email = 'name@example.com'; $domain = strstr($email, '@'); - $domain=='@example.com' $user = strstr($email, ‘@’, TRUE); // $user == ‘name’

strpos($haystack, $needle, $offset) stripos($haystack, $needle, $offset) - без учета регистра strrpos($haystack, $needle, $offset) - поиск с конца – находит первый повтор $needle в строке (допускается пропуск первых символов $offset)

strpbrk($string, $charlist) - с учетом регистра – разбивает строку в месте нахождения символа и возвращает строку или FALSE в случае, если символ не был найден

str_replace($search, $replace, $subject) str_ireplace($search, $replace, $subject) - без учета регистра – находи и заменяет часть строки, $search может быть массивом, дополнительно можно задать $count в качестве четвертого аргумента, которому будет передано количество замен

strtr($string, $from, $to) strtr($string, $replace_array) – переводит символы или заменяет подстроки – например echo strtr(“baab”, “ab”, “01”); // 1001 – например $trans = array(“ab” => “01”); echo strtr(“baab”, $trans); // ba01

str_repeat($string, $times) - повторяет строку $times раз

str_split($string,$maximum_length) – разбивает строку на массив, каждый длиной не более чем $maximum_length

strspn($string, $charlist, $start, $length) – Возвращает длину участка в начале строки, полностью соответствующего маске

strcspn($string,$charlist,$start,$length) – Возвращает длину участка в начале строки, не соответствующего маске

strrev($string) – Переворачивает строку задом наперед

str_shuffle($string) – Перемешивает строку

parse_str($string,$array) – разбивает строку в переменные, $str = “first=value&arr[]=foo+bar&arr[]=baz”;

parse_url($url) – разбивает url по элементам в ассоциативный массив

str_getcsv($input,$delimiter,…) – PHP > 5.3, разбирает CSV строку в массив

get_magic_quotes_gpc() – возвращает 1 если magic_quotes_gpc включены, 0 если нет

addslashes($string) – добавляет символ обратного слеша перед “,’,\,NUL

stripslashes($string) – убирает символы слеша из строки

addcslashes($string, $charList_to_add) – экранирует символы из $charList_to_add, [\]^_~ всегда экранируются

stripcslashes($string, $charList_to_add) – удаляет экранирование сделанное при помощи addcslashes

strtok($string,$delimiter) – разбивает строку $string по разделителю $delimiter и возвращает (разделитель не включается) – при последующих вызовах можно использовать strtok($delimiter), разделитель не включается

chunk_split($string) – разбивает строку на части, например применяется в base64_encoding() или при выводе email

crypt($string, $optional_salt) – однопроходное кодирование строки $string, возвращает хешированную при помощи Unix DEX алгоритма строку или используя другие алгоритмы доступные в системе (начиная с PHP 5.3, PHP содержит в себе собственные алгоритмы), например, $hashed_password = crypt(‘mypassword’); if (crypt($user_input, $hashed_password) == $hashed_password) { echo “Password verified!”; } – чем защищеннее, тем медленее

crypt_md5() – кодирует строку при помощи md5 алгоритма.

hash($algo, $data) – возвращает хеш, полученный алгоритмом в $algo

md5($string) md5_file($filestream) – возвращает хеш в виде 32-символьного шестнадцатеричного числа

crc32($string) – Функция вычисляет циклический избыточный код 32-битных полиномов (CRC32) для строки. Это обычно используется для контроля целостности передаваемых данных.

sha1($string) sha1_file($filestream) – Возвращает хеш в виде 40-символьного шестнадцатеричного числа

str_rot13($string) – сдвигает каждую букву на 13 позиций в алфавите, кодирование и декодирование производится одной функцией.

mbstring (многобайтовая строка)

  • несмотря на то, что во многих языках достаточно 8-мибитового значения для хранения всех символов, это правило не распространяется на все языки (Байт состоит из 8ми бит. Каждый бит может содержать два значения, 1 или 0. Поэтому байт может содержать 256 различных значений (2 в степени 8)). Схемы кодирования многобайтовых символов были разработаны, чтобы можно было представить более 256 символов в обычной побитовой системе кодировки.
  • по-умолчанию этот модуль отключен, включается в настройке (--enable-mbstring=all)
  • для перегрузки функции установите mbstring.func_overload в php.ini в положительное значение, чья битовая маска отвечает за то, какие функции были перегружены. Если установить этот параметр в 1, то будет перегружена функция mail(). 2 - строковые функции, 4 - регулярные выражения и так далее.
  • обрабатывает преобразование кодировок
  • mb_check_encoding($string, $encoding) - проверяет соответствует ли строка кодировке
  • mb_internal_encoding(“UTF-8”) - устанавливает внутреннюю кодировку
  • mb_strlen()

PCRE (регулярные выражения в соответствии с Perl)

  • совместимо с многобайтовыми строками
  • разделитель - применяется в начале и конце каждого шаблона, можно его установить вручную, обычно используются “/”, “#”, “~”, “!” или скобки: {pattern}
  • жадность - по-умолчанию возвращается максимально возможное количество совпадений символов

Мета символы

  • \ основной экранирующий символ
  • [] класс
  • | или
  • () подшаблон
  • [^] отрицание класса, должно быть размещено на месте первого символа
  • [-] диапазон

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

  • \d цифры 0-9 [:digit:]
  • \D все, кроме цифр
  • \w любой буквенно-численный символ или знак нижнего подчеркивания (_) [:word:]
  • \W все кроме буквенно-численных символов или знака нижнего подчеркивания
  • \s любой пробел (пробел, табуляция, новая строка) [:space:]
  • \S любой символ, кроме пробела
  • . любой символ кроме новой строки
  • alnum буквы и числа
  • alpha буквы
  • lower буквы в нижнем регистре
  • upper буквы в верхнем регистре

Анкоры (якоря)

  • ^ начало строки
  • $ конец строки (если включен многострочный режим, /n - аналог окончания строки)

Указатели положения

  • \b граница слова
  • \B не граница слова
  • \A начало строки
  • \Z окончание строки или символ новой строки в конце
  • \z конец строки
  • \G положение первого соответствующего символа

Кванторы

  • ? встречается 0 или 1 раз
  • * встречается 0 и более раз
  • + встречает 1 и более раз
  • {n} встречается n раз
  • {,n} встречается не более n раз
  • {m,} встречается m и более раз
  • {m,n} встречается между m и n раз
  • Комбинация ? и или + изменяет алгоритм на нежадный, например `?или+?`

Свойства unicode символов (для UTF-8)

  • \p{xx} символ со свойством xx
  • \P{xx] символ со свойством не равным xx
  • \X расширенная последовательность Unicode

Изменение шаблона

  • i – поиск без учета регистра
  • m – многострочный режим, $ и ^ соответствуют новым строкам
  • s – точка будет соответствовать новой строке
  • x – разрешает комментирование
  • U – устанавливает нежадный алгоритм
  • u – включает поддержку UTF8
  • e – позволяет использовать preg_replace()

Пример

$pattern = '/^\s+/i';

Функции

preg_match($pattern, $subject, $matches, $flags, $offset); - выполняет обычную обработку регулярного выражения, находит соответствие, останавливается после первого совпадения, возвращает 1 при обнаружении соответствия, 0 если соответствий не было найдено, FALSE при возникновении ошибки

preg_match_all (); - осуществляет глобальную обработку регулярного выражения и возвращает число совпадений

preg_grep($pattern, $array); - возвращает массив, состоящий из элементов входного массива, которые соответствуют шаблону, ключи сохраняются, то же самое что и preg_filter но без замещения

preg_filter($pattern, $replace, $subject); - возвращает и заменяет $subject при совпадении, $subject может быть массивом

preg_replace($pattern, $replace, $subject); - возвращает $subject после замещения всех соответствий

preg_replace_callback($pattern, $callback, $subject) - изменяет строки при помощи функции обратного вызова

$array = preg_split ($pattern, $string); - массив из $string разделенную по шаблону $pattern

preg_quote ($sting, $optional_delimiter); - форматирует строку в PECL шаблон с экранирующими символами

preg_last_error(); - возвращает код ошибки последней обработки регулярного выражения, например, PREG_NO_ERROR, PREG_BAD_UTF8_OFFSET_ERROR

Комментарии

0
Войти
Комментариев нет.
Войдите чтобы оставлять комментарии.