正则表达式检查字符串是否仅在最后一个字符实例之后和另一个

时间:2016-11-11 12:38:02

标签: regex url iis

我试图在IIS中为重写规则编写特定的正则表达式模式,如果它与模式匹配则停止处理更多规则。

网址看起来像这样:

somesite.com/somepath/34343.aspx

我需要看看我是否只有34343部分中的数字 somesite.com/somepath/something343.aspx

我试过像这样匹配模式:
([0-9] *)。ASPX $
但是这会选择后一个URL并停止处理规则,以便以后的匹配不会运行。我需要它们在后面的规则上运行而不是停止处理。

因此,如果有人可以提供帮助,我需要一些方法来检查在最后一个尾随斜杠之后和最后一个之前是否只有数字。(点)

我也试过这个: ()/(。)。(。*) 这似乎给了我想要的东西,因为它给了我分组匹配:

  • 完全匹配 - somesite.com/somepath/34343.aspx
  • Group 1- somesite.com/somepath
  • Group 2- 34343
  • Group 3- aspx

但是我不知道如何使用第2组然后检查该文本仅用于数字?

有人可以帮忙吗?

由于

修改

感谢您的回复,但这两种模式对我来说都不起作用。我将它们插入到IIS Url重写工具中,虽然相当精彩的测试模式选项告诉我它们匹配,但它们规则并不会触发。

<rule name="Ignore id with aspx" enabled="true" stopProcessing="true">
    <match url="^(.*\/\d+\..+)$" ignoreCase="true" />
    <!--OR-->
    <match url="^.*\/\d+\.[^.]+$" ignoreCase="true" />        
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
</rule>

或者至少它不再停止处理后续规则。

巧合的是,我说我使用的规则([0-9] *)。aspx $会触发并停止处理后续规则。

2 个答案:

答案 0 :(得分:0)

你可以像这样制作正则表达式:

(.*\/)+(\d*\..+)

这将检查它是否只包含数字。

答案 1 :(得分:0)

感谢您的帮助,但我设法弄清楚为什么它没有触发规则,现在似乎正在运作。

我设置了失败的请求跟踪规则,并注意到该规则已从检查中删除了基本网址http://somesite.com/。所以它只是寻找Url的最后一点。

由于有问题的网址是http://somesite.com/12345.apsx,因此很容易在请求中检查数字和.aspx。

<rule name="Ignore id with aspx" enabled="true" stopProcessing="true">
    <match url="^\d*\..+[aspx]" ignoreCase="true" /> 
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
    <action type="None" />
</rule>