【问题标题】:Regular expression for add_rewrite_rules with at least one hyphen带有至少一个连字符的 add_rewrite_rules 的正则表达式
【发布时间】:2016-08-20 19:26:56
【问题描述】:

我正在使用 Wordpress 的 add_rewrite_rules 的正则表达式。

我的目标是匹配具有单个目录且其中至少包含一个破折号的 URL,并返回该目录。

我找到了这个:

'^([a-zA-Z0-9]*-[a-zA-Z0-9]*){1,20}/?$' => 'index.php?pagename=location&location=$matches[1]'

如果有连字符则匹配,但只返回字符串的结尾(最后一个连字符之后的部分)。

所以:

test/ 失败(应该如此,因为没有连字符)

te-st/ 通过,但只返回变量的“st”。

te-st-ing/ 传递,但只为变量返回“ing”。

te-st-ing/a/ 失败(因为还有另一个目录)

我对表达式有点迷茫,但目标是“test-st”会通过但会返回整个“te-st”字符串。我认为对于知道如何处理表达式的人来说,这应该是一个简单的解决方法?

谢谢!

【问题讨论】:

    标签: regex wordpress url-rewriting expression


    【解决方案1】:

    只是为了确保您可以使用至少一个连字符:

    '^([^-/]*-[^/]*)/?$' => 'index.php?pagename=location&location=$matches[1]'
    

    【讨论】:

    • 这似乎非常接近工作,但它仍然与其他目录匹配(如te-st-ing/test)并将整个字符串作为变量值返回(在该示例中,te-st-ing/test 也是返回值,而不是预期的te-st-ing)。
    • 更近了!返回的值现在是正确的,但即使有其他目录,它仍然与字符串匹配 - 所以 te-st-ing/test 返回为 te-st-ing 而不是像它应该返回的那样返回 false。但是,te-st-ing/ 正确返回值为 te-st-ing/
    • 好的,我没有意识到您希望为 te-st-ing/test 返回 false。尝试另一个更新。
    • 漂亮!非常感谢,效果很好。
    【解决方案2】:

    请试试这个模式:

    ^((?:\w+-){1,20}\w*)/?$
    

    REGEX 101 DEMO.

    【讨论】:

      猜你喜欢
      • 2011-01-26
      • 1970-01-01
      • 2013-06-24
      • 2013-05-29
      • 1970-01-01
      • 1970-01-01
      • 2012-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多