PHP preg_match标签+花括号

时间:2011-04-07 17:41:29

标签: php regex preg-match

我有一个字符串,如:

#sometag-{serialized-data-here}

我希望匹配 模式 ,但使用大括号内的所有内容(因此我可以稍后对其进行反序列化)。如何将此文本模式与preg_match()?

匹配

到目前为止,我有:

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

但是如果在没有哈希标记的$ text中,这只匹配大括号的内容。

编辑:以下是我想要完成的逻辑:

  $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 个答案:

答案 0 :(得分:2)

为什么不使用explode()?

$tag_data_arr = explode('-', $text, 2);

答案 1 :(得分:2)

让它变得贪婪......

$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 :(得分:1)

使用此:

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代替。