Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php preg_match只提供一个匹配_Php_Regex_Preg Match - Fatal编程技术网

Php preg_match只提供一个匹配

Php preg_match只提供一个匹配,php,regex,preg-match,Php,Regex,Preg Match,我正在尝试创建一个url处理程序,并尝试使用preg_match查找变量。 下面是我在url格式的变量替换后得到的preg_匹配(例如:post/%id%/%title%)- 我的问题是$match只返回这个数组内部- “post/5/lol” 而不是那样的数组- Array ( [0] => "post/5/lol", [1] => "5", [2] => "lol" ) 有人能帮我找出为什么它只返回一个匹配项吗

我正在尝试创建一个url处理程序,并尝试使用preg_match查找变量。 下面是我在url格式的变量替换后得到的preg_匹配(例如:post/%id%/%title%)-

我的问题是$match只返回这个数组内部-

“post/5/lol”

而不是那样的数组-

Array ( 
        [0] => "post/5/lol",
        [1] => "5",
        [2] => "lol"
      )

有人能帮我找出为什么它只返回一个匹配项吗?

用括号将要捕获的每个片段括起来,创建子表达式:

preg_match("/post\/([0-9]+)\/([a-z-א-ת-]+)/i", "post/5/lol", $match);

你忘了用
()
符号标记捕获组。顺便问一下,难道不能用一个简单的
分解('/')
操作来完成吗?@raina77ow:使用
preg_match
可以限制允许的输入。在本例中,遍历由
explode
生成的数组是一件痛苦的事情。我可以,但我希望用户选择url格式。如果我把+号放在圆括号外,会发生什么情况?@Yehonatan:只返回第一个匹配项,这意味着第一个字符(
5
l
,在本例中)是不需要的。@Yehonatan:没问题!请记住,单击“我的答案”旁边的绿色复选标记,将此问题标记为已回答。
preg_match("/post\/([0-9]+)\/([a-z-א-ת-]+)/i", "post/5/lol", $match);