Помощь в регулярном выражени

145
29 апреля 2018, 20:42

нужна помощь в регулярном выражении а именно:
Вот так скрипт работает в норме:

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
Answer 1

Так как у вас вот эта часть 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']);
READ ALSO
PHP работа с файлом

PHP работа с файлом

Есть обычный текстовый документ ttxt

162
Проблема с кодировкой при выводе из БД

Проблема с кодировкой при выводе из БД

Есть таблица в БДВ ней есть значение на кириллице

205
Как добавить произвольное поле к записи, чтобы оно отображалось на сайте и в админке?

Как добавить произвольное поле к записи, чтобы оно отображалось на сайте и в админке?

Как добавить произвольное поле к записи, чтобы оно отображалось на сайте и в админке?

197
PHP и работа в Oracle

PHP и работа в Oracle

Есть ли в php библиотека (что-то на подобии phpredbeans), для работы с Oracle?

180