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