Примеры решения задач

Задача

Задача. С помощью позитивного и негативного просмотра найдите все строки по шаблону буква z, затем 2 буквы y и поменяйте 2 буквы y на знак '!'. То есть из 'zyy' нужно сделать 'z!'.

Решение: воспользуемся позитивным просмотром назад:

<?php
	echo preg_replace('#(?<=z)yy#i', '!', 'zyy ayy');
?>

Результат выполнения кода:

z! ayy

Задача

Задача. Дана строка с целыми числами 'a1b2c3'. С помощью регулярки преобразуйте строку так, чтобы вместо этих чисел стояли их кубы.

Решение: воспользуемся функцией preg_replace_callback:

<?php
	echo preg_replace_callback('#(\d+)#', 'cube', 'a1b2c3');
 	function cube($matches)
	{
		$result = pow($matches[0], 3); //$matches[0] - это найденное число
		return $result;
	}
?>

Результат выполнения кода:

a1b8c27

Задачи для решения

На позитивный и негативный просмотр

С помощью позитивного и негативного просмотра найдите все строки по шаблону буква b, затем 3 буквы a и поменяйте 3 буквы a на знак '!'. То есть из 'baaa' нужно сделать 'b!'.

Решение:

<?php
	echo preg_replace('#(?<=b)aaa#', '!', 'baaa');
 ?>

С помощью позитивного и негативного просмотра найдите все строки по шаблону любая буква, но не b, затем 3 буквы a и поменяйте 3 буквы a на знак '!'. То есть из, к примеру, 'waaa' нужно сделать 'w!', а 'baaa' не поменяется.

Решение:

<?php
	echo preg_replace('#(?<!b)aaa#', '!', 'baaa, waaa');
 ?>

С помощью позитивного и негативного просмотра найдите все строки по шаблону 3 буквы a, затем буква b и поменяйте 3 буквы a на знак '!'. То есть из 'aaab' нужно сделать '!b'.

Решение:

<?php
	echo preg_replace('#aaa(?=b)#', '!', 'aaab');
 ?>

С помощью позитивного и негативного просмотра найдите все строки по шаблону 3 буквы a, затем любая буква, но не b и поменяйте 3 буквы a на знак '!'. То есть из, к примеру, 'aaaw' нужно сделать '!w', а 'aaab' не поменяется.

Решение:

<?php
	echo preg_replace('#aaa(?!b)#', '!', 'aaaw, aaab');
 ?>

Дана строка со звездочками 'aaa * bbb ** eee * **'. Замените на '!' только одиночные звездочки, но не двойные.

Решение:

<?php
	echo preg_replace('#(?<!\*)\*(?!\*)#', '!', 'aaa * bbb ** eee * **');
 ?>

Дана строка со звездочками 'aaa * bbb ** eee *** kkk ****'. Замените на '!' только двойные звездочки, но не одиночные или тройные и более.

Решение:

<?php
	echo preg_replace('#(?<!\*)\*{2}(?!\*)#', '!', 'aaa * bbb ** eee *** kkk ****');
 ?>

С помощью позитивного и негативного просмотра найдите две одинаковые идущие подряд буквы и первую поменяйте на '!'.

Решение:

<?php
	echo preg_replace('#([a-z])(?=\1)#', '!', 'aabbccdefffgh'); //!a!b!cde!!fgh
 ?>

С помощью позитивного и негативного просмотра найдите две одинаковые идущие подряд буквы и вторую поменяйте на '!'.

Решение:

<?php
	echo preg_replace('#(?<=([a-z]))\1#', '!', 'aabbccdefffgh'); //a!b!c!def!!gh
 ?>

На preg_replace_callback

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

Решение:

<?php
	function func($matches)
	{
		return $matches[0] * $matches[0];
	}

	echo preg_replace_callback('#\d#', 'func', '123456789');
 ?>

Дана строка с целыми числами. Найдите числа, стоящие в кавычках и увеличьте их в два раза. Пример: из строки 2aaa'3'bbb'4' сделаем строку 2aaa'6'bbb'8'.

Решение:

<?php
	function func($matches)
	{
		return $matches[1] * 2;
	}

	echo preg_replace_callback("#'(\d+)'#", 'func', " 2aaa'3'bbb'4'");
 ?>

Сложные задачи с тестами

Если вы порешали все задачи и чувствуете уверенность в своих силах - смотрите "Занимательные задачи по регулярным выражениям PHP" на сайте regular.phphtml.net.