Regex 不带最终字符的正则表达式匹配

Regex 不带最终字符的正则表达式匹配,regex,isapi-rewrite,Regex,Isapi Rewrite,我正在尝试匹配任何没有文件夹字符(/)或以扩展名(.aspx)结尾的url请求。我现在可以忽略正则表达式中的查询字符串值和片段。到目前为止,我有以下几点 ^([\w-/]+)(?!\.aspx|/)$ 但是,如果我运行此表达式,它会在我不希望它执行的组中选择final/。目标是将.aspx附加到未使用Isapi ReWrite指定的URL,然后将请求转发到.NET引擎 以下示例以粗体显示当前匹配中的所有字符 asd.aspx 这个 something.aspx 这个/test/(不要最后的/)

我正在尝试匹配任何没有文件夹字符(/)或以扩展名(.aspx)结尾的url请求。我现在可以忽略正则表达式中的查询字符串值和片段。到目前为止,我有以下几点

^([\w-/]+)(?!\.aspx|/)$
但是,如果我运行此表达式,它会在我不希望它执行的组中选择final/。目标是将.aspx附加到未使用Isapi ReWrite指定的URL,然后将请求转发到.NET引擎

以下示例以粗体显示当前匹配中的所有字符

asd.aspx
这个
something.aspx
这个/test/(不要最后的/)
此测试/(不想要最终结果/)
此测试
这个测试/那个/测试


如果在表达式中找到final/if,是否有人可以建议一个不选择final/if的表达式?

将/移到组外():


从正则表达式中删除/并将其添加到外部,并指定它可以出现0或1次


^([\w-/]+)(?!.aspx)(/){0,1}$

尝试在断言后面查找:

^([\w-/]+)(?<!/|\.aspx)$

^([\w-/]+)(?您的第一句话与正则表达式或示例不匹配。
在我看来,你想要:

  • 如果字符串以
    .aspx
    结尾,则不要进一步处理
  • 否则,如果字符串以
    /
    结尾,请删除该斜杠
  • 处理字符串

  • 也许你对正则表达式做的太多了

    为什么不显式地测试扩展名(.aspx),如果没有扩展名(.aspx),那么在对字符串进行额外处理之前,检测并删除一个终端斜杠

    也就是说:我确信可以创建一个具有负前瞻性的正则表达式,它将执行1和2操作,但是显式执行不是更清晰吗

    您可能还想测试更多示例:

    foo/bar/.aspx
    foo/bar.aspx/
    foo.aspx/bar
    foo.aspx/bar/
    

    只是为了确保你知道你期望的输出是什么。

    ?是{0,1}的简写,没有必要对尾随进行分组/你是对的,但我没有看到?在你之前的回答中,可能我错过了。/?不匹配吗,因为贪婪的+总是会接受它?前瞻断言
    (?!\.aspx)
    因为字符串末尾没有任何内容。这是一个否定的前瞻性断言-我看不出final/?将如何匹配任何内容(即,它将始终是{0,1}中的0)。也许你试图对正则表达式做的太多了?要么你的第一句话错了,要么你的正则表达式和示例都错了。你想匹配所有结尾没有斜杠或.aspx的字符串吗?我检查了你提供给Douglas的示例,谢天谢地,它们使用Gumbo提供的正则表达式不匹配。不过想法不错+1。我猜您的正则表达式引擎允许可变宽度的查找后断言吗?@Douglas Leeder:查找后有一个固定的宽度:一个或五个字符。可变宽度将允许无限上界,如
    *
    +
    have。
    foo/bar/.aspx
    foo/bar.aspx/
    foo.aspx/bar
    foo.aspx/bar/