如何在php中使用相同的正则表达式匹配?

时间:2011-08-01 06:56:29

标签: php regex serialization

我有这个字符串(这是php中的序列化变量):

s:12:"hello "world";

我想找到“你好”世界“只有正则表达式,我试试这个,但似乎是愚蠢的:P

(s:(?P<num>[0-9]+):".{\k{num}}";)

我只想知道如何在其正则表达式中使用“num”结果?

这个正则表达式用在一个大的正则表达式中,所以我无法检查字符串的结尾。

感谢提前!

3 个答案:

答案 0 :(得分:1)

您可以将指定的捕获组用作此类

的反向引用
  

可以通过(?P = name)实现对命名子模式的后向引用   或者,从PHP 5.2.2开始,也通过\ k或\ k'name'。另外PHP   5.2.4增加了对\ k {name}和\ g {name}。

的支持

According to php.net

但我认为这只能用于再次匹配找到的模式,而不能用作量词中的数字。 (至少我没有让它起作用。)

答案 1 :(得分:0)

您可以使用preg_match函数,它将填充一系列匹配项:

  

如果提供了匹配,那么它将填充搜索结果。 $ matches [0]将包含与完整模式匹配的文本,$ matches 1将具有与第一个捕获的带括号的子模式匹配的文本,依此类推。

有关preg_match的更多信息:PHP: preg_match

答案 2 :(得分:0)

$text = 's:12:"hello "world";s:12:"good bue world";';
    $pattern = "(.*:[0-9]+:\"(.*)\";.*)U";
    preg_match_all($pattern,$text,$r);