URL中的正则表达式

时间:2013-01-02 22:48:20

标签: php regex codeigniter url-routing

我已经尝试过寻找答案,但首先要提出一个棘手的问题,就是这样。

考虑以下网址:

  • 酒店 - 伦敦 - 肯辛顿-5星级
  • 酒店 - 伦敦 - 肯辛顿-伦敦梅费尔五星
  • 酒店 - 伦敦 - 五星

使用正确的正则表达式返回以下内容:

  • 伦敦肯辛顿
  • 伦敦肯辛顿-菲儿
  • 伦敦

我正在尝试使用正则表达式来获取中心值。在所有情况下,我都知道字符串的第一个和最后一个字,即'hotels'(第一个)和'5star'(last)。

更新:我需要使用正则表达式,因为URL是通过Codeigniters URI路由器路由的。 URI的中心部分是为搜索结果动态构建的。

2 个答案:

答案 0 :(得分:5)

既然你知道了第一个和最后一个词,你也知道它们的长度。

$out = substr($in,7,-6);

或更一般地说:

$out = substr($in,strlen($begin),-strlen($end));

编辑:如果正则表达式必需,只需使用/(?<=hotels-).*(?=-5star)/

答案 1 :(得分:3)

对于这种简单的情况,您可以使用explode()

$parts = explode('-', $string);
$wanted = array_slice($parts, 1, count($parts)-2);

更新:正则表达式。我仍然认为手动将字符串拆分成更容易。

~hotels-(.+)-5start~