我绝对讨厌RegEx,我真的需要学习它 - 它是如此强大。这是问题所在:
我正在尝试重写IIS中的URL,我有这个默认的RegEx:
^([^/]+)/?$
但是,这确实可以让business/profile.html
之类的内容通过,但它允许business-profile.html
通过。
如何更改它以便让前者通过?
由于
答案 0 :(得分:3)
如果你想了解和学习正则表达式,当你对他们正在做的事情感到困惑时,要学会分解它们的含义。这是相同的正则表达式,采用扩展格式。
^ # Start of the string
( # Take a group...
[^/]+ # of one or more characters (the +) that are NOT the / character
) # end of the group
/? # an optional '/'
$ # End of string
所以这个正则表达式匹配:
/
字符的所有字符串/
的所有字符串要“修复”正则表达式,我们需要通过“通过”来了解你的真正含义。你的意思是“匹配正则表达式吗?”
(附注:一个很好的资源是http://www.regular-expressions.info/ - 它提供了一个很好的交叉工具参考和正则表达式教程。)
答案 1 :(得分:2)
原始RE的目的似乎是“禁止任何带有斜杠的URL”(最后允许一个在末尾)。如果你的目的是“绝对禁止”,那么^(.*?)/?$
应该有效(*?
意味着非贪婪的匹配 - RE方言对于这些高级事物有所不同,所以我不知道你的支持是否会支持它)。 @Wrikken已经展示了如何允许“最多一个斜线内部”,并且明确地概括为任何固定N的“最多N个斜线”。不知道你想要允许什么,以及禁止什么,很难成为更有帮助! - )