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

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

但是,如果我运行此表达式,它会选择我不希望它执行的组中的最后一个 / 。目标是将 .aspx 附加到未使用 Isapi ReWrite 指定的 url,然后将请求转发到 .NET 引擎。

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

asd.aspx

某事.aspx
这个/测试/ (不想要最后的/)
这个测试/ (不想要最后的/)
本次测试
这个测试/那个/测试

任何人都可以建议一个不会选择最终 / if 在表达式中找到的表达式吗?

有帮助吗?

解决方案

尝试查找后面断言:

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

其他提示

移动/组外():

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

您的第一句话与您的正则表达式或示例不匹配。
在我看来你想要:

  1. 如果字符串结尾为 .aspx 不要进一步处理。
  2. 否则如果字符串以 / 删除该斜杠。
  3. 处理字符串。

也许您尝试使用正则表达式做太多事情?

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

也就是说:我确信可以创建一个带有负向前瞻的正则表达式,它将执行 1 和 2,但显式地执行它不是更清楚吗?

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

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

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

从正则表达式删除/和外添加它,并指定其可具有0或1的发生。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top