我已经看过很多从URL或路径获取文件名的例子,但我无法解决这个问题。
我的网址如下所示:
http://www.bob.net/john/john/ken/mary.html
如果网址中存在Mary
,我需要获得/john/john
。否则,如果路径
ken
,我需要获取/john
我可以使用mary
获得\/\w*\/\w*\/(\w*)\/(\w*)
,但是依赖于Mary
在第4次斜线之后。
我怎样才能做到这一点?
编辑 - 感谢目前为止的回复。
如果/ john存在于网址中,是否有机会让这种动态变得正常?不管其他什么?
答案 0 :(得分:0)
尝试这种模式
^.*?[^\/]\/([^\/]+)\/(?:\1\/[^\/]+\/([^\/.]+)|([^\/]+))
Demo您正在寻找的是第二个捕获组
答案 1 :(得分:0)
如果路径中Mary
为John
,否则为John
,请使用此功能:
^(?=.*john).*(mary)|.*(ken)
如果匹配,请检查match[1]
和match[2]
:只会设置一个。
在Perl和PCRE中,您可以通过条件或分支重置更紧凑地执行此操作。