【问题标题】:Regular Expression Exact Keyword Exclusion正则表达式精确关键字排除
【发布时间】:2010-07-25 02:11:15
【问题描述】:

大家好,我正在寻找一个不匹配任何给定字符串的正则表达式,该字符串完全等于我将手动确定的几个关键字。

目的是编辑我的urlrewrite.xml,它可以接受以下格式的正则表达式

<rule>
     <from>^/location/([A-Z]+)/name/([A-Z]+)</from>
     <to>/login?name=$2&location=$1</to>
</rule>

例如,我想将 / 之后不是“登录”和“注册”的所有内容重定向到另一个页面。我正在尝试关注那些,但没有一个能满足我的要求。

^/(?!(login|signup).*
^/(?!(login|signup)[A-Za-z0-9]+

因为我希望它仅在输入正好是“登录”或“注册”时才匹配,但是它也拒绝“loginblabla”。

高度赞赏任何解决方案。 :)

【问题讨论】:

  • 你能用end of string anchor$吗?
  • 不要将 * 放在正则表达式的开头或结尾,这是不必要的,它会使处理速度变慢。将其排除在外具有完全相同的效果。
  • 我不明白正则表达式需要做什么。你能给出一些你想要匹配和不匹配的精确例子吗?另外,什么语言?
  • 怎么样:^/((!(l))|(l!(o))|(lo!(g))|(log!(i)|(logi! (n))|(登录[a-zA-Z0-9]))

标签: regex url-rewriting


【解决方案1】:

您需要在前瞻末尾添加一个$ 锚点:

^/(?!(login|signup)$)(.+)

现在任何不准确 loginsignup 的东西都将被捕获到 $1 组中。

【讨论】:

  • +1 这比我的更合乎逻辑,是昨天另一个正则表达式游览留下的脑残。
  • 它将以 2 美元的价格捕获。 $1 将捕获登录或注册。
  • 对。我忘记添加 ?: 以使第一组不被捕获。
  • 谢谢艾伦。这个解决了我的问题:^/(login|signup)((/.*)?)$ 多亏了那个,我也可以转发 /a/b/ 方案。
猜你喜欢
  • 2010-09-12
  • 2015-07-10
  • 2021-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多