我正在尝试匹配任何没有文件夹字符(/)或以扩展名(.aspx)结尾的网址请求。我现在可以忽略正则表达式中的查询字符串值和片段。到目前为止,我有以下内容。
^([\w-/]+)(?!\.aspx|/)$
但是,如果我运行这个表达式,它会选择我不希望它做的组中的final /。目标是将.aspx附加到没有使用Isapi ReWrite指定的URL,然后将请求转发到.NET引擎。
以下示例以粗体显示当前匹配中的所有字符
asd.aspx
的此
something.aspx
this / test / (不想要最终/)
this-test / (不想要最终/)
的此测试
的此测试/该/测试
任何人都可以建议一个表达式,它不会选择表达式中的final / if吗?
答案 0 :(得分:4)
尝试后视断言:
^([\w-/]+)(?<!/|\.aspx)$
答案 1 :(得分:1)
移动组外的/():
^([\w-/]+)(?!\.aspx)/?$
答案 2 :(得分:1)
您的第一句话与您的正则表达或示例不符 在我看来,你想要:
.aspx
结尾,请不要进一步处理。/
结尾,则删除该斜杠。也许你正试图用正则表达式做太多事情?
为什么不明确测试你的扩展名(.aspx),如果你没有那个,那么在额外处理字符串之前检测一个终端斜杠并删除它?
也就是说:我确信可以创建一个带有负前瞻的正则表达式,它可以做1&amp; 2,但明确地做到这一点并不是更清楚。
您可能还想测试更多示例:
foo/bar/.aspx
foo/bar.aspx/
foo.aspx/bar
foo.aspx/bar/
只是为了确保你知道你期望输出的内容。
答案 3 :(得分:0)
从正则表达式中删除/并将其添加到外部并指定它可以有0或1次出现。
^([\ W - /] +)(?!CSS)(/){0,1} $