<?php
$input = 'some words link.com mysite.ru somelink.net';
$forbidden = ['link.com', 'somelink.net'];
// Экранируем все спецсимволы в списке запрещённых сайтов
$regexp = implode(array_map('preg_quote', $forbidden), '|');
$output = preg_replace('/(https?:\/\/)?(www\.)?(' . $regexp . ')/i', '***', $input);
<?php
$input = 'some words link.com mysite.ru somelink.net';
$output = preg_replace('/(https?:\/\/)?(www\.)?(link\.com|somelink\.net)/i', '***', $input);
\((?<name>[^)]+)\)\((?<type>\d+)\)\((?<percent>[^)]+)\)(?:\((?<who>[^)]+)\))?
Negative operators “!~” and “!~*” are also available.
~*
на !~*
$result = preg_replace_callback('/\d/', function ($matches) use ($db) {
// Запрос к базе данных $db
return $replace;
}, '1 2 3');
Можно конечно как-то наговнокодить, пытаться сгенерировать регулярку, потом ее подставлять, но интересует красивый и быстрый способ
$mask = 'X-XX-XX-XXXXX';
$test = '7-Ds-re-SD434';
$pattern = preg_replace_callback('/X+/', function ($m) {
return '[^-]{' . strlen($m[0]) . '}';
}, preg_quote($mask));
if (preg_match("/^{$pattern}$/", $test)) {
echo "Строка '$test' подходит под маску '$mask'";
}
$mask = 'X-XX-XX-XXXXX';
$test = '7-Ds-re-SD434';
if (preg_replace('/[^-]/', 'X', $test) == $mask) {
echo "Строка '$test' подходит под маску '$mask'";
}
preg_match('/<w:body>.*(<w:p>(.*)<\/w:p>).*<\/w:body>/is', $string, $matches);
function f_callback($buffer)
{
$pattern = '~(<a[a-z\-_\s\"\#\=]*)(href=")((https?|ftp)://(?!site.ru|[^"]*"\s+class="link"))~i';
$replace = '$1$2http://site.ru/go.php?url=$3';
$buffer = preg_replace($pattern, $replace, $buffer);
return $buffer;
}
ob_start('f_callback');
echo '<a href="http://google.com">Ссылка должна быть закрыта</a>';
echo '<br>';
echo '<a href="http://site.ru/">Ссылка не должна быть закрыта</a>';
echo '<br>';
echo '<a href="/contact">Ссылка не должна быть закрыта</a>';
echo '<br>';
echo '<a href="http://google.ru" class="link">Ссылка не должна быть закрыта</a>';