我需要分开以下网址:
/myapp/public/controller/action
$ 1将成为控制器,$ 2将成为行动。
以下是我正在使用的REGEX:
^([a-zA-Z0-9\/\-_]+)\.?([a-zA-Z\-_]+)?$
出于某种原因,它不是分离,而是将整个结果放在$ 1中:
$1 = /myapp/public/controller/action
$2 = '' (empty)
PS:动作是可选的,因为我可能有/ myapp / public / controller。在这种情况下,$ 2应为空。
[编辑]
URL字符串可能具有以下格式:
/myapp/public/controller
/myapp/public/controller/action
/myapp/public/controller/action/param1
/myapp/public/controller/action/param1/param2/paramN
$1
应始终包含具有完整路径的控制器
$2
将收到剩余的action
,action/param1
,action/param1/param2/paramN
)
控制器始终为myapp/public/controller
,其中myapp/public
为静态,controller
为控制器名称,需要转至$ 1(第3个字符串)。
极端情况下,我们可以调用/myapp/public
并发送空的''
控制器,默认情况下会在应用程序上编制索引。
答案 0 :(得分:1)
^(.+)\/([^\/]+)$
有了新的要求:
^((?:\/[^\/]+){2,3})((?:\/[^\/]+)*)$
阐释:
(?:\/[^\/]+)
- 匹配正斜杠后跟字符,这些字符不是正斜杠(例如/myapp
,/public
,/controller
,/action
等等){2,3}
- 控制器由前两个或三个这样的序列组成。当您使用应用程序的默认索引时,有两个。*
- 其余此类序列是行动的一部分