Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex IIS URL重写正则表达式使用选项列表定义所需的字符串块_Regex_Iis_Url Rewriting - Fatal编程技术网

Regex IIS URL重写正则表达式使用选项列表定义所需的字符串块

Regex IIS URL重写正则表达式使用选项列表定义所需的字符串块,regex,iis,url-rewriting,Regex,Iis,Url Rewriting,我正在尝试构建与以下内容匹配的正则表达式: 这是默认的英文网站URL: 这是默认的德国网站URL: 现在的表达式是:^([a-z]{0,2})\/(buy | kauf)\/([a-zA-Z0-9-+])$ 所以,我尝试过的东西的分解: 具有语言的可选块:([a-z]{0,2})用于语言的参数值 转义所需的正斜杠\/ 只能有值“buy”或“kauf”的必需块:(buy | kauf),无需将此值用作参数,因此不确定是否必须使用括号 转义所需的正斜杠\/ 捕获主类型所需的块:([a-zA-Z0-

我正在尝试构建与以下内容匹配的正则表达式:

这是默认的英文网站URL:

这是默认的德国网站URL:

现在的表达式是:
^([a-z]{0,2})\/(buy | kauf)\/([a-zA-Z0-9-+])$

所以,我尝试过的东西的分解:

  • 具有语言的可选块:
    ([a-z]{0,2})
    用于
    语言的参数值
  • 转义所需的正斜杠
    \/
  • 只能有值“buy”或“kauf”的必需块:
    (buy | kauf)
    ,无需将此值用作参数,因此不确定是否必须使用括号
  • 转义所需的正斜杠
    \/
  • 捕获主类型所需的块:
    ([a-zA-Z0-9-+]+)
    用于
    类型的参数值
我的IIS重写规则:

<rule name="test rewrite">
  <match url="^([a-z]{0,2})\/(buy|kauf)\/([a-zA-Z0-9-+]+)$" />
  <action type="Rewrite" url="homes.aspx?type={R:3}&amp;language={R:1}" />
</rule>
使用

^https:\/\/([^\/]+)\/(?:([a-z]{1,2})\/)?(购买卡夫)\/([^\/]+)$

解释

--------------------------------------------------------------------------------
^字符串的开头
--------------------------------------------------------------------------------
https:'https:'
--------------------------------------------------------------------------------
\/                       '/'
--------------------------------------------------------------------------------
\/                       '/'
--------------------------------------------------------------------------------
(组和捕获到\1:
--------------------------------------------------------------------------------
[^\/]+除“\/”(1个或更多)以外的任何字符
次数(与最大金额匹配)
(可能的)
--------------------------------------------------------------------------------
)结束\1
--------------------------------------------------------------------------------
\/                       '/'
--------------------------------------------------------------------------------
(?:组,但不捕获(可选)
(匹配尽可能多的金额):
--------------------------------------------------------------------------------
(分组并捕获到\2:
--------------------------------------------------------------------------------
[a-z]{1,2}‘a’到‘z’(介于
1次和2次(匹配最大
(可能的金额)
--------------------------------------------------------------------------------
)结束\2
--------------------------------------------------------------------------------
\/                       '/'
--------------------------------------------------------------------------------
)?                       分组结束
--------------------------------------------------------------------------------
(分组并捕获到\3:
--------------------------------------------------------------------------------
买‘买’
--------------------------------------------------------------------------------
|或
--------------------------------------------------------------------------------
考夫“考夫”
--------------------------------------------------------------------------------
)结束\3
--------------------------------------------------------------------------------
\/                       '/'
--------------------------------------------------------------------------------
(分组并捕获到\4:
--------------------------------------------------------------------------------
[^\/]+除“\/”(1个或更多)以外的任何字符
次数(与最大金额匹配)
(可能的)
--------------------------------------------------------------------------------
)结束\4
--------------------------------------------------------------------------------
$在可选的前\n和
一串

也许像这样的
\/(?:[a-z]{2}\/)(?:buy | kauf)\/[a-zA-Z0-9-+]+$
请看一看:@Flo你的问题不清楚。您希望为正则表达式提供什么类型的站点地址?谢谢大家@ShekharKhairnar我使用您的表达式作为测试的基础,但我遇到了分组问题……您可以尝试编写两个正则表达式来分别匹配和,然后在两个表达式之间添加|。例如:
^(buy)/([^/]+)$|^([^/]+)/(kauf)/([^/]+)$
谢谢,这个表达式现在正确地触发了我的重写规则,但是,
https://www.example.com/de/kauf/appartement
不会作为
lang
参数值传递。当我在上查看您的示例时,我还看到,
de
值没有被选为单独的组,我该如何做?@Flo
lang
参数值在组2中,我想它是
{R:2}
。谢谢,我添加了更新2以了解一些IIS的具体信息,您可以看看吗?@Flo But in
^([a-z]{0,2})\/)?(buy | kauf)\/([^\/]+)$
,参数
lang
在组2中(请参见)。因此,它必须是
{R:2}
    <rule name=""test rewrite">
      <match url="^(([a-z]{0,2})\/)?(buy|kauf)\/([^\/]+)$" />
      <action type="Rewrite" url="homes.aspx?type={R:4}&amp;language={R:1}" />
    </rule>