Полный цикл в digital

Функции PHP

preg_replace()

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

<?php
preg_replace(#шаблон_для_поиска#, на_что_менять, где_искать);
?>
<?php
echo preg_replace('#a#', '!', 'bab xax'); // вернет b!b x!x
?>

preg_replace карман

Если мы что-то положим в карман в регулярке, то в параметре на что менять мы можем обратиться к этому карману так:

  1. $1 первый карман
  2. $2 второй карман
  3. $0 соответствует всему выражению
<?php
preg_replace(#шаблон_для_поиска_с_карманом#, на_что_менять, где_искать);
?>
<?php
echo preg_replace('#([a-z]+)@([a-z]+)#', '$2@$1', 'a@b aa@bb'); // вернет b@a bb@aa
?>

Если мы что-то положим в карман в регулярке, то в параметре на что менять мы можем обратиться к этому карману так: $1 – первый карман, $2 второй карман и так далее.

Давайте решим следующую задачу: даны строки вида aaa@bbb - буквы, потом собака, потом буквы. Нужно поменять местами буквы до @ и после. В нашем случае из aaa@bbb сделать bbb@aaa:

<?php
echo preg_replace('#([a-z]+)@([a-z]+)#', '$2@$1', 'a@b aa@bb'); // b@a bb@aa
?>

Карман $0 соответствует всему выражению. Давайте заменим подстроки из букв на них самих с ! по краям:

<?php
echo preg_replace('#[a-z]+#', '!$0!', 'aaa bbb'); // вернет '!aaa! !bbb!'
?>

preg_replace_callback()

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

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

<?php
preg_replace(#шаблон_для_поиска#, функция_коллбэк, где_искать);
?>

У нас есть строка, нам нужно найти все конструкции вида число+число= и сделать так, чтобы после равно появился результат сложения:

<?php
    $str = '2+3= 3+5= 7+8=';
?>

Первым параметром коллбэка нужно указать переменную, в которую будет попадать найденное. Эта переменная будет представлять собой массив карманов найденного. Напишем, код, который поймает наши подстроки, при этом положив первое число в первый карман, а второе во второй:

<?php
$str = '2+3= 3+5= 7+8=';
preg_replace_callback('#(\d+)\+(\d+)=#', function ($match) {
	var_dump($match);
}, $str);
?>

В результате наш var_dump сработает три раза, по очереди выведя следующее:

['2+3=', '2', '3']
['3+5=', '3', '5']
['7+8=', '7', '7']

Каждое совпадение будет заменено на то, что возвращает коллбэк через return. Заменим каждую подстроку на сумму пары чисел в ней:

<?php
$str = '2+3= 3+5= 7+8=';
$res = preg_replace_callback('#(\d+)\+(\d+)=#', function ($match) {
	return $match[0] . ($match[1] + $match[2]);
}, $str);
// выведет '2+3=5 3+5=8 7+8=13'
echo $res; 
?>

preg_match()

Проверяет, есть ли в строке совпадение с регуляркой, функция найдет только первое совпадение и закончит свою работу. Функция возвращает:

  1. 1 значит есть что искали, сколько раз неясно
  2. 0 нет того что искали
  3. false в случае какой-либо ошибки
<?php
preg_match(#шаблон_для_поиска#, где_искать);
?>
<?php
echo preg_match('#a+#', 'eee aaa bbb'); // вернет 1
?>
<?php
echo preg_match('#a+#', 'eee aaa aa bbb'); // все равно вернет 1
?>
<?php
echo preg_match('#a+#', 'eee bbb'); // вернет 0
?>

preg_match_all()

Функция находит все совпадения и возвращает массив с найденным.

<?php
preg_match_all(#шаблон_для_поиска#, где_искать, найденное);
?>
<?php
echo preg_match_all('#a+#', 'eee aaa bbb'); // вернет 1
?>
<?php
echo preg_match_all('#a+#', 'eee aaa aa bbb'); // вернет 2
?>
<?php
echo preg_match_all('#a+#', 'eee bbb'); // вернет 0
?>

preg_match_all третий параметр

<?php
echo preg_match_all('#a+#', 'eee aaa aa bbb a', $matches)); // вернет 3
// выведет массив совпадений:
var_dump($matches);
[0=>[0=>'aaa', 1=>'aa', 2=>'a']]
?>

preg_match_all карман

<?php
echo preg_match_all('#x(a+)x#', 'xax xaax xaaax', $matches); //выведет 3
// выведет массив совпадений и содержимое кармана:
var_dump($matches);
[
0=>[0=>'xax', 1=>'xaax', 2=>'xaaax'], // это найденные подстроки
1=>[0=>'a', 1=>'aa', 2=>'aaa'] // это содержимое кармана
]
?>

preg_split()

Делит строку регулярным выражением, возвращает массив, содержащий подстроки из строки, разделённой по границам совпадений.

<?php
preg_split ('#шаблон_для_поиска#', 'где_искать', 'limit', 'flags');
?>
  1. #шаблон_для_поиска# шаблон для поиска в виде строки с регулярным выражением
  2. где_искать входная строка
  3. limit если указан, функция возвращает не более, чем limit подстрок, оставшаяся часть строки будет возвращена в последней подстроке. Специальное значение limit, равное -1, 0 или NULL подразумевает отсутствие ограничения, и, в качестве фактического стандарта в PHP, можно использовать NULL для пропуска параметра flags
  4. flags может быть любой комбинацией следующих флагов (объединенных с помощью побитового оператора |):
    PREG_SPLIT_NO_EMPTY если указан этот флаг, функция preg_split() вернет только непустые подстроки
    PREG_SPLIT_DELIM_CAPTURE если указан этот флаг, выражение, заключенное в круглые скобки в разделяющем шаблоне, также извлекается из заданной строки и возвращается функцией
    PREG_SPLIT_OFFSET_CAPTURE Если указан этот флаг, для каждой найденной подстроки будет указана ее позиция в исходной строке. Необходимо помнить, что этот флаг меняет формат возвращаемого массива: каждый элемент будет содержать массив, содержащий в индексе с номером 0 найденную подстроку, а смещение этой подстроки в параметре где искать - в индексе 1
<?php
// разбиваем строку по произвольному числу запятых и пробельных символов
$keywords = preg_split("#[\s,]+#", "hypertext language, programming");
print_r($keywords); // вернет массив: Array ( [0] => hypertext [1] => language [2] => programming )
?>
<?php
// разбиваем строку на составляющие символы
$keywords = preg_split('##', 'string', -1, PREG_SPLIT_NO_EMPTY);
print_r($keywords); // вернет массив: Array ( [0] => s [1] => t [2] => r [3] => i [4] => n [5] => g )
?>
<?php
// разбиваем строку с указанием смещения для каждой из найденных подстрок
$keywords = preg_split('# #', 'hypertext language programming', -1, PREG_SPLIT_OFFSET_CAPTURE);
print_r($keywords); // вернет массив: Array ( [0] => Array ( [0] => hypertext [1] => 0 ) [1] => Array ( [0] => language [1] => 10 ) [2] => Array ( [0] => programming [1] => 19 ) )
?>

Модификаторы регулярных выражений

Модификаторы - это команды, которые записываются после второго ограничителя (#.+#iuiu выступают модификаторами). Они позволяют изменять свойства регулярных выражений.

<?php
// в этом случае решетки в качестве ограничителей использовать нельзя, поэтому здесь стоят амперсанды модификатор x - регулярка перестанет учитывать пробелы и можно будет ставить комментарии после решетки # 
echo preg_replace('&
.+? #любой символ один или более раз
a #потом буква a
&x', '!', 'строка');
?>
Модификаторы методов
g Ищет все совпадения со «строкой-шаблоном» (по умолчанию поиск останавливается после первого совпадения)
u Поддержка юникода, регулярка будет обрабатывать в кодировке UTF-8
x Все неэкранированные пробельные символы, которые находятся вне символьного класса, будут проигнорированы
i Регистронезависимый поиск (a и A считаются эквивалентными)
m Многостроковый режим. По умолчанию PCRE ищет совпадения с шаблоном только внутри одной строки, а символы ^ и $ совпадают только с началом и концом всего текста. Когда этот параметр установлен, ^ и $ совпадают с началом и концом отдельных строк
s Однострочность, контент считается одной строкой в отличие от режима по умолчанию, символ . включает в себя пробельные символы начинает совпадать с переносом строки, хотя по умолчанию нет
U Инвертирует "жадность" для каждого квантификатора (если же после квантификатора стоит ?, этот квантификатор перестает быть "жадным").
X Экранировка обычного символа приведет к ошибке, без X обычные символы можно экранировать, они все равно будут обозначать сами себя (исключение: цифры, они станут карманами)
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг