我有一个字符串,如:
#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";}
答案 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代替。