【问题标题】:Remove entire querystring using regex使用正则表达式删除整个查询字符串
【发布时间】:2012-02-26 17:38:38
【问题描述】:

我有下面的正则表达式,但是如果查询字符串存在,我怎样才能完全删除它:

^~/(.*)/restaurant/(.*)

例如。网址

/seattle/restaurant/sushi?page=2 

/seattle/restaurant/sushi?somethingelse=something 

/seatthe/restaurant/sushi 

应该只返回 seattlerestaurantsushi 并删除任何存在的查询字符串。

(很抱歉重新发布了一个类似的问题,但我无法在上一个问题中得到答案)。

谢谢

托马斯

【问题讨论】:

    标签: regex url-rewriting


    【解决方案1】:

    这个正则表达式:

    (/[^?]+).*

    应与您的 URL 的初始部分匹配并将其放在一个组中。

    所以它将匹配/seattle/restaurant/sushi并将值放入一个组中。

    如果您只想处理带有单词 restaurant 作为斜杠之间的第二个单词的 URL,您可以使用类似这样的内容:(/.*?/restaurant[^?]+).*

    编辑:这样的事情应该产生 3 个组:/(.*?)/(restaurant)/([^?]+).*。第 1 组为 seatthe,第 2 组为 restaurant,第 3 组为 sushi。如果在最后一个 / 之后有一个 ?,则正则表达式会丢弃 ? 以及后面的所有内容。

    【讨论】:

    • 我想将“seattle”和“sushi”作为单独的匹配项进行匹配。此外,如果“sushi”由查询字符串进行。在这种情况下,我想匹配“寿司”并删除?以及之后的一切。谢谢
    • 优秀。这样可行!我尝试删除最后两组 (restaurant) 和 ([^?]+).* 之间的斜线,因为我希望它以与 /seattle/restaurant/sushi 相同的方式匹配 /seattle/restaurant?page=2?页= 2。但我无法让它工作。由于我在 2. 级别位置上有很多其他 URL,例如 /seattle/restaurant-michelangelo,不应该被捕获,我想我需要硬编码应该被捕获的 2. 级别的值(例如餐厅,咖啡馆,外卖)。在第三级(/西雅图/餐厅/寿司)我没有问题,所以你的建议在这里有效。谢谢
    • 如何修改正则表达式以匹配来自 url /seattle/restaurant 的西雅图和餐厅? Page =2 并丢弃查询字符串?我尝试修改上述内容,但无法使其正常工作。谢谢
    • @ThomasD:我建议你打开一个新问题。
    • 谢谢。我在stackoverflow.com/questions/9145069/need-help-modifying-regex 开了一个新问题。谢谢您的帮助。我真的很感激
    【解决方案2】:

    您应该更改最终的/./ 以匹配“除了问号之外的任何内容”

    ^~/(.*)/restaurant/([^?]*)
    

    【讨论】:

    • 刚刚尝试过,它部分有效 :-) 我仍然希望它返回“sushi”,即使“sushi”后面可能跟一个查询字符串。因此,例如像 /seattle/restaurant/sushi?page=2 这样的查询将匹配“seattle”和“sushi”。现在,如果它由查询字符串进行,它似乎与“sushi”不匹配。谢谢
    猜你喜欢
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    相关资源
    最近更新 更多