нужна помощь в регулярном выражении а именно:
Вот так скрипт работает в норме:
function callbackFunction( $matches) {
echo $matches[1]."\n";
echo $matches[2]."\n";
echo $matches[3]."\n";
}
$pattern = '!\\[hide=([0-9,]+),user=(.+?)\\](.+?)\\[\\/hide\\]!is';
$subject = '[hide=3,user=test1,test2]rgqgefrefe[/hide]';
print_r(preg_replace_callback($pattern, 'callbackFunction', $subject, -1));
Вывод
3
test1,test2
rgqgefrefe
если же мы убираем в субъекте user, код не работает
$subject = '[hide=3]rgqgefrefe[/hide]';
Мне нужно что бы хайд работал как с [hide=цифра,user=логин], а так же по раздельности как [hide=1] так и [hide=login1,login2] и что бы результат был как
1
user1,user2
rgqgefrefe
Так как у вас вот эта часть user=test1,test2 не обязательна, то было бы лучше использовать именованные подмаски. Шаблон будет выглядеть так:
\[hide=(?<hide>.+?)(?:,\s?user=(?<user>.+))?](?<text>.+?)\[/hide]
Код лучше записать с использованием preg_match_all():
$str = '[hide=3, user=текст1, текст2]текст[/hide]';
//$str = '[hide=hide]текст[/hide]'; // Этот вариант тоже рабочий
$patt = '~\[hide=(?<hide>.+?)(?:,\s?user=(?<user>.+))?](?<text>.+?)\[/hide]~';
preg_match_all($patt, $str, $arr);
var_dump($arr['hide'], $arr['user'], $arr['text']);
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости