需要帮助解决困扰我一段时间的问题!
我正在尝试创建一个与URL匹配的Apache AliasMatch
正则表达式。我遇到的问题是我在文件匹配部分中使用捕获组作为变量$0 $1 $2
。基本上我需要捕获网址的path/to/controller
部分以实际抓取我的文件,我希望在包含双正斜杠后不使用任何捕获组。
http://domain.com/etc/xx/abc/的路径/到/控制器 // myDesiredMVCAction
问题基本上是使用以下表达式:
^/etc/(xx|yy)/(abc|xyz)/(.*)(?=//)(.*)
它只匹配
http://domain.com/etc/xx/abc/path/to/controller//myDesiredMVCAction
而不是:
http://domain.com/etc/xx/abc/path/to/controller
鉴于双斜杠和尾随它的所有内容都是可选的。
因此,当我通过附加?
使regex表达式成为可选时,它会通过包含//myDesiredMVCAction
部分来破坏捕获组。
^/etc/(xx|yy)/(abc|xyz)/(.*)(?=//)(.*)?
有可能实现我之后的目标吗?
答案 0 :(得分:1)
我相信你可以使用
^/etc/(xx|yy)/(abc|xyz)/(.*?)(?://.*)?$
^^^^^^^^^^^^^^^
请参阅regex demo
问题是,该模式的(.*?)(?://.*)?$
部分的工作原理是(.*?)
不首先尝试,因为它是*?
和(?://.*)?$
的懒惰量化首先尝试,当后者不匹配时,(.*?)
展开,在每个扩展步骤中将字符写入组值。
模式匹配:
^/etc/
- /etc/
(xx|yy)/
- xx
或yy
,然后是/
(abc|xyz)/
- abc
或xyz
以及/
之后(.*?)
- 任何零个或多个字符,但在第一个(?://.*)?
- (最后?
引用的可选组)两个/
后跟任意字符,最多可达$
- 字符串输入的结尾。