另一个RegEx问题

时间:2010-07-19 23:20:57

标签: regex

我绝对讨厌RegEx,我真的需要学习它 - 它是如此强大。这是问题所在:

我正在尝试重写IIS中的URL,我有这个默认的RegEx:

^([^/]+)/?$

但是,这确实可以让business/profile.html之类的内容通过,但它允许business-profile.html通过。

如何更改它以便让前者通过?

由于

2 个答案:

答案 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个斜线”。不知道你想要允许什么,以及禁止什么,很难成为更有帮助! - )