正则表达式匹配可选的第三个 url 参数

Regex match optional third url parameter

我有以下 URL 结构:

http://sitename.com/subdir/category-name/subcategory-name/article

这里有一些例子 URLs:

http://127.0.0.1/ocko/works/videos/
http://127.0.0.1/ocko/texts/stuff/
http://127.0.0.1/ocko/works/teletubbies/oint/
http://127.0.0.1/ocko/works/teletubbies/oint/

类别可以是 workstextsarticle 是可选的。

这是我的正则表达式:

(works|texts)(\/.+)(?:(\/.+))\/

问题是它只匹配最后两个例子,比如第三个参数(article)是强制性的,即使我在最后一部分写了(?:(\/.+))

我正在尝试将幕后内容重新路由为类似 :

http://127.0.0.1/ocko/category/works/videos/

我正在构建如下字符串: http://127.0.0.1/ocko/category/$1$2$3

怎么样:

 (works|texts)(\/.+?)(\/.+?)?\/

https://regex101.com/r/oK1eU7/1