поиск и замена элементов preg - PullRequest
1 голос
/ 08 марта 2012

Привет, как мне сделать preg матч на

$string1 = "[%refund%]processed_by"

$string2 = "[%refund%]date_sent"

Я хочу захватить биты внутри %%, а затем полностью удалить [%item%]. оставив только "proccessed_by" или "date_sent", у меня был спуск ниже, но я немного застрял.

$unprocessedString = "[%refund%]date_sent"

$match   =  preg_match('/^\[.+\]/', $unprocessedString);
$string  =  preg_replace('/^\[.+\]/', $unprocessedString);

echo $match; // this should output refund

echo $string; // this should output date_sent

1 Ответ

2 голосов
/ 08 марта 2012

Ваша проблема связана с использованием функции preg_match. Возвращает число найденных совпадений. Но если вы передадите ей переменную в качестве третьего параметра, она сохранит совпадения для всего шаблона и его подшаблонов в массиве.

Таким образом, вы можете захватить обе нужные вам части в подшаблонах с помощью preg_match, что означает, что вам не нужно preg_replace:

$unprocessedString = "[%refund%]date_sent"
preg_match('/^\[%(.+)%\](.+)/', $unprocessedString, $matches);
echo $matches[1]; // outputs 'refund'
echo $matches[2]; // outputs 'date_sent'
...