Apache2 正则表达式可选捕获组
Apache2 Regular Expression Optional Capture Group
需要帮助解决困扰我一段时间的问题!
我正在尝试创建将匹配 URL 的 Apache AliasMatch
正则表达式。我遇到的问题是我在文件匹配部分中使用捕获组作为变量 [=11=]
。本质上,我需要捕获 url 的 path/to/controller
部分以实际获取我的文件,并且我希望在双正斜杠之后不使用任何捕获组。
http://domain.com/etc/xx/abc/path/to/controller//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
鉴于双斜杠及其后的所有内容都是可选的。
因此,当我通过附加 ?
使正则表达式可选时,它通过包含 //myDesiredMVCAction
部分破坏了捕获组..
^/etc/(xx|yy)/(abc|xyz)/(.*)(?=//)(.*)?
有可能实现我所追求的吗?
我相信你可以使用
^/etc/(xx|yy)/(abc|xyz)/(.*?)(?://.*)?$
^^^^^^^^^^^^^^^
问题是,模式的 (.*?)(?://.*)?$
部分的工作方式是 (.*?)
不会首先尝试,因为它是用 *?
和 [=14 延迟量化的=] 首先尝试,当后者不匹配时, (.*?)
扩展,在每个扩展步骤向组值写入一个字符。
模式匹配:
^/etc/
- /etc/
在基础 URL 之后
(xx|yy)/
- xx
或 yy
然后 /
(abc|xyz)/
- abc
或 xyz
和 /
在它们之后
(.*?)
- 任何零个或多个字符,但在第一个 之前尽可能少
(?://.*)?
-(可选组,因为末尾有 ?
)两个 /
后跟任何字符,尽可能多到
$
- 字符串输入结束。
需要帮助解决困扰我一段时间的问题!
我正在尝试创建将匹配 URL 的 Apache AliasMatch
正则表达式。我遇到的问题是我在文件匹配部分中使用捕获组作为变量 [=11=]
。本质上,我需要捕获 url 的 path/to/controller
部分以实际获取我的文件,并且我希望在双正斜杠之后不使用任何捕获组。
http://domain.com/etc/xx/abc/path/to/controller//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
鉴于双斜杠及其后的所有内容都是可选的。
因此,当我通过附加 ?
使正则表达式可选时,它通过包含 //myDesiredMVCAction
部分破坏了捕获组..
^/etc/(xx|yy)/(abc|xyz)/(.*)(?=//)(.*)?
有可能实现我所追求的吗?
我相信你可以使用
^/etc/(xx|yy)/(abc|xyz)/(.*?)(?://.*)?$
^^^^^^^^^^^^^^^
问题是,模式的 (.*?)(?://.*)?$
部分的工作方式是 (.*?)
不会首先尝试,因为它是用 *?
和 [=14 延迟量化的=] 首先尝试,当后者不匹配时, (.*?)
扩展,在每个扩展步骤向组值写入一个字符。
模式匹配:
^/etc/
-/etc/
在基础 URL 之后
(xx|yy)/
-xx
或yy
然后/
(abc|xyz)/
-abc
或xyz
和/
在它们之后(.*?)
- 任何零个或多个字符,但在第一个 之前尽可能少
(?://.*)?
-(可选组,因为末尾有?
)两个/
后跟任何字符,尽可能多到$
- 字符串输入结束。