Regex Apache2正则表达式可选捕获组
需要帮助解决困扰我一段时间的问题 我正在尝试创建一个ApacheRegex Apache2正则表达式可选捕获组,regex,apache2,Regex,Apache2,需要帮助解决困扰我一段时间的问题 我正在尝试创建一个ApacheAliasMatch正则表达式来匹配URL。我遇到的问题是,我将捕获组用作文件匹配部分中的变量$0$1$2。基本上,我需要捕获url的路径/to/controller部分才能真正抓取我的文件,我不希望在包含双正斜杠之后使用任何捕获组 路径/to/controller//MyDesiredMVAction 问题的实质是,使用以下表达式: ^/etc/(xx | yy)/(abc | xyz)/(*)(?=/)(*) 它只匹配 http
AliasMatch
正则表达式来匹配URL。我遇到的问题是,我将捕获组用作文件匹配部分中的变量$0$1$2
。基本上,我需要捕获url的路径/to/controller
部分才能真正抓取我的文件,我不希望在包含双正斜杠之后使用任何捕获组
路径/to/controller//MyDesiredMVAction
问题的实质是,使用以下表达式:
^/etc/(xx | yy)/(abc | xyz)/(*)(?=/)(*)
它只匹配
http://domain.com/etc/xx/abc/path/to/controller//myDesiredMVCAction
而不是:
http://domain.com/etc/xx/abc/path/to/controller
考虑到双斜杠和后面的所有内容,它是可选的
因此,当我通过附加一个?
使正则表达式成为可选表达式时,它通过包含//myDesiredMVAction
部分破坏了捕获组
^/etc/(xx | yy)/(abc | xyz)/(*)(?=/)(*)?
有可能实现我的目标吗?我相信你可以使用
^/etc/(xx|yy)/(abc|xyz)/(.*?)(?://.*)?$
^^^^^^^^^^^^^^^
见
问题是,模式的(.*)(://.*)$
部分的工作方式是,不首先尝试(.*)
,因为它是用*?
惰性地量化的,(?://.*)首先尝试(?://.*),
,当后者不匹配时,(.*)
会扩展,在每个展开步骤向组值写入一个字符
模式匹配:
^/etc/
-/etc/
在基本URL之后
(xx | yy)/
-xx
或yy
然后是a/
(abc | xyz)/
-一个abc
或xyz
和它们后面的一个/
(.*)
-任何零个或多个字符,但在第一个字符之前尽可能少
(?:/.*)
-(由于末尾的?
而为可选组)两个/
后跟任意字符,尽可能多至
$
-字符串输入的结尾
谢谢@Wiktor!似乎贪婪的量化与我的思维过程并不相似。。今天学到了一些新东西:智商+1;)懒惰和贪婪的量词在一起使用时是如何工作的很难理解。我建议你看看。