我想检查并分解这个字符串:
{$gallery#pager/collectionName/imageName/manual/no_effect/foo1/foo2/.../fooN}
to:
var_name[0] => 'gallery',
modul_name[0] => 'pager',
3[0] => 'collectionName',
4[0] => 'imageName',
5[0] => 'manual'
...
N[0] => 'fooN'
我做了下面的正则表达式:
/{\$(?P<var_name>[^#]+)#(?P<module_name>[^\/]+)(?:\/(\w+)(?:\/(\w+)(?:\/(\w+)(?:\/(\w+)(?:\/(\w+))?)?)?)?)?}/
但它太丑了,而且只支持最多五个参数。请帮我编写递归部分以提取所有参数。
附注:是的,我可以将其拆分为var_name、module_name和paramters三个部分,然后通过“/”来分割parameters部分,但我不喜欢这样做。
{$var_name#module_name}
- 这种格式是必须的。参数是可选的:{$var_name#module_name/arg1/arg2/.../argN}
。所有名称和值(变量名、模块名、参数)都可以通过\w+
进行检查。 - Varteresz Gabor{\$(\w+)#(\w+)(?:\/([\w|\/]+))?}
,它已经被验证过了,下一步我可以通过/
来分解$match[3]
。但是我太有强迫症了。 :) - Varteresz Gabor