我有这个字符串(这是php中的序列化变量):
s:12:"hello "world";
我想找到“你好”世界“只有正则表达式,我试试这个,但似乎是愚蠢的:P
(s:(?P<num>[0-9]+):".{\k{num}}";)
我只想知道如何在其正则表达式中使用“num”结果?
这个正则表达式用在一个大的正则表达式中,所以我无法检查字符串的结尾。
感谢提前!
答案 0 :(得分:1)
您可以将指定的捕获组用作此类
的反向引用可以通过(?P = name)实现对命名子模式的后向引用 或者,从PHP 5.2.2开始,也通过\ k或\ k'name'。另外PHP 5.2.4增加了对\ k {name}和\ g {name}。
的支持
但我认为这只能用于再次匹配找到的模式,而不能用作量词中的数字。 (至少我没有让它起作用。)
答案 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);