我有以下任务(PHP作为语言),它由两部分组成:
E.g。模式是/users/{id}/{action}
,并且:
/users/367/edit
命名字段的{ id:"367", action:"edit" }
; { id:"15", action:"delete" }
输出字符串为/users/15/delete
。这里棘手的部分是我希望像正则表达式一样有一些力量和灵活性,但努力最少。即优雅的东西,理想的单线。如果可能的话,宁愿不实现自定义模式解析。
不好的例子是:
preg_match
中的命名群组,例如#^/users/(?<id>\w+)/(?<action>\w+)$#
:
sscanf
/ sprintf
,例如/users/%s/%s
:
%s
会在/users/
之后吃掉所有内容),sscanf
格式如%[^/]
无法直接传递给{ {1}}。sprintf
,例如fnmatch
:
/users/*/*
),没有命名字段,也没有简单的方法从同一模式生成字符串。所以,也许我只是遗漏了一些东西,也许有一些众所周知的(但我不知道)模式匹配的东西,如shell模式或正则表达式,可立即在PHP中使用,或者易于实现?< / p>
谢谢。