说我要求
parent/child/child/page-name
在我的浏览器中。我想提取父,子以及页面名称。这是我目前正在使用的正则表达式。网址请求中有多少个孩子应该没有限制。目前,页面名称将始终位于末尾,永远不会被省略。
^([\w-]{1,}){1} -> Match parent (returns 'parent')
(/(?:(?!/).)*[a-z]){1,}/ -> Match children (returns /child/child/)
[\w-]{1,}(?!.*[\w-]{1,}) -> Match page name (returns 'page-name')
我玩的越多,我就越觉得这个解决方案有多笨重。这是我在ASP Classic(:()中开发的一个小型CMS。它有点像MVC路由路径。但不是基于URL请求调用控制器和函数。我将沿着层次结构向下移动并找到数据库中的相应页面。数据库使用嵌套集模型,并通过每个子项的唯一页面名称链接。
我尝试使用split函数拆分/分隔符,但是我发现我嵌套了这么多拆分语句,它变得非常难以理解。
所有人说,我需要一种有效的方法来解析父,子,以及字符串中的页面名称。有人可以提供替代解决方案吗?
老实说,我甚至不确定正则表达式是否是我问题的最佳解决方案。
谢谢。
答案 0 :(得分:2)
您可以尝试使用:
^([\w-]+)(/.*/)([\w-]+)$
然后访问使用Match.SubMatches
创建的三个匹配组。有关详细信息,请参阅here。
修改强>
实际上,假设您知道[\w-]
是部件名称中使用的全部内容,您可以使用^([\w-]+)(.*)([\w-]+)$
代替它,它也可以自行处理无子案例