正则表达式帮助 - 分离控制器和操作

时间:2015-12-15 20:39:58

标签: regex

我需要分开以下网址:

/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将收到剩余的actionaction/param1action/param1/param2/paramN

控制器始终为myapp/public/controller,其中myapp/public为静态,controller为控制器名称,需要转至$ 1(第3个字符串)。

极端情况下,我们可以调用/myapp/public并发送空的''控制器,默认情况下会在应用程序上编制索引。

PS:有时看起来很简单的事情恰恰相反......感谢你提出的问题......

1 个答案:

答案 0 :(得分:1)

^(.+)\/([^\/]+)$

See it in action

有了新的要求:

^((?:\/[^\/]+){2,3})((?:\/[^\/]+)*)$

See it in action

阐释:

  • (?:\/[^\/]+) - 匹配正斜杠后跟字符,这些字符不是正斜杠(例如/myapp/public/controller/action等等)
  • {2,3} - 控制器由前两个或三个这样的序列组成。当您使用应用程序的默认索引时,有两个。
  • * - 其余此类序列是行动的一部分