PHP preg_match tag + фигурные скобки - PullRequest
0 голосов
/ 07 апреля 2011

У меня есть строка, такая как:

#sometag-{serialized-data-here}

И я хочу сопоставить этот шаблон , но использовать все внутрифигурные скобки (так что я могу разобрать это позже).Как мне сопоставить этот текстовый шаблон с preg_match ()?

Пока у меня есть:

preg_match('~{[^{}]*}~', $text, $match);

, но это просто соответствует содержимому фигурных скобок, если в $ text без тега hash.

РЕДАКТИРОВАТЬ: Вот логика того, что я пытаюсь сделать:

  $user_post = "Here is my cool post that contains some media.";
  $media = array("mediatype" => "sometype", "id" => "ebJ2brErERQ", "title" => "Some cool video", "description" => "Some cool description");  
  $user_post .= "#sometag-" . serialize($media);

Позже, когда я получаю $ user_post из базы данных, я хочу соответствоватьтекст, раздеть его и отобразить медиа.

У меня будет что-то вроде этого:

Here is my cool post that contains some media.#sometag-a:4:{s:9:"mediatype";s:8:"sometype";s:2:"id";s:11:"ebJ2brErERQ";s:5:"title";s:15:"Some cool video";s:11:"description";s:21:"Some cool description";}

Ответы [ 3 ]

2 голосов
/ 07 апреля 2011

Сделай это жадным ...

$text = "#sometag-{hello:{}{}yooohooo}";

preg_match('/#([\w]+)\-{(.*)}/is', $text, $matches);

print_r($matches);

Результат ...

Array
(
    [0] => #sometag-{hello:{}{}yooohooo} //everything
    [1] => sometag //tag
    [2] => hello:{}{}yooohooo //serialized data
)
2 голосов
/ 07 апреля 2011

Почему бы не использовать explode ()?

$tag_data_arr = explode('-', $text, 2);
1 голос
/ 07 апреля 2011

Используйте это:

preg_match('~#sometag-({[^{}]*})~', $text, $match);

Тогда:

echo $match[1];

Чтобы быть более конкретным, () определяет подшаблонов .Вы можете использовать столько, сколько вы хотите, чтобы соответствовать различным вещам в регулярном выражении.Например:

preg_match('~#(some)(tag)-({[^{}]*})~', $text, $match);
echo $match[1]; // some
echo $match[2]; // tag
echo $match[3]; // {serialized-data-here}

Примечание: Вы хотите использовать вместо него preg_match_all .

...