正则表达式帮助:在破折号上打破......或不

时间:2013-12-11 19:06:40

标签: regex

在IIS8中执行URL重写,并需要有关正则表达式的帮助。

在这样的网址中:

mysite.com/wichita-2014-Honda-Ridgeline

以下表达式效果很好

^wichita-([^/-]+)-([^/-]+)-([^/-]+)$

分成简单的

/index.php?year={R:0}&make={R:1}&model={R:2}

效果很好。它打破了

mysite.com/wichita-2014-Honda-CR-V

请注意“CR-V”中的新短划线。到目前为止,解决方案是在更一般的规则之前有一个例外规则:

^wichita-([^/-]+)-([^/-]+)-CR-V$

我试过

^wichita-([^/-]+)-([^/-]+)-[a-zA-Z0-9\-]*$

但是返回三个匹配,R:0是整个URL!显然,这不是我想要的。

我必须想象有更好的方法。我还没有找到它,而且我对正则表达式并不强烈。

所以,总结一下:如果可能的话,我正在寻找一个正则表达式:

  1. 匹配三个词:year,make,model(只是为了给他们起名字)
  2. 这三个搜索字词用短划线分隔。
  3. 第3版可能还包含一个破折号(或一个空格,在URL中表示为加号),应该作为术语的一部分而不是分隔符。
  4. 请帮忙吗?

1 个答案:

答案 0 :(得分:0)

我使用^wichita-([^/-]+)-([^/-]+)-(.+)$,并将捕获组R:1,R:2和R:3映射到/index.php?year={R:1}&make={R:2}&model={R:3}

.+将前两个捕获组之后的所有内容捕获到最后一桶中的“任何进展”。