正则表达式匹配没有最终字符

时间:2009-11-18 09:25:23

标签: regex isapi-rewrite

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

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

但是,如果我运行这个表达式,它会选择我不希望它做的组中的final /。目标是将.aspx附加到没有使用Isapi ReWrite指定的URL,然后将请求转发到.NET引擎。

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

asd.aspx

something.aspx
this / test / (不想要最终/) this-test / (不想要最终/) 的此测试
此测试/该/测试

任何人都可以建议一个表达式,它不会选择表达式中的final / if吗?

4 个答案:

答案 0 :(得分:4)

尝试后视断言:

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

答案 1 :(得分:1)

移动组外的/():

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

答案 2 :(得分:1)

您的第一句话与您的正则表达或示例不符 在我看来,你想要:

  1. 如果字符串以.aspx结尾,请不要进一步处理。
  2. 否则,如果字符串以/结尾,则删除该斜杠。
  3. 处理字符串。
  4. 也许你正试图用正则表达式做太多事情?

    为什么不明确测试你的扩展名(.aspx),如果你没有那个,那么在额外处理字符串之前检测一个终端斜杠并删除它?

    也就是说:我确信可以创建一个带有负前瞻的正则表达式,它可以做1&amp; 2,但明确地做到这一点并不是更清楚。

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

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

    只是为了确保你知道你期望输出的内容。

答案 3 :(得分:0)

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

^([\ W - /] +)(?!CSS)(/){0,1} $