从右到左阅读正则表达式不起作用

时间:2013-08-17 14:39:12

标签: php regex

我需要将字符串Live-tv-channel-nbc-130pm-1000pm-s2-1.html转换为Live-tv-channel-nbc,即我需要删除部分130pm-1000pm-s2-1.html(此值为动态值)

我试过下面的代码

$str = "Live-tv-channel-nbc-130pm-1000pm-s2-1.html";
$title = preg_replace("/-(.*?)-(.*?)-(.*?)-(\d+).html$/","",$str;
echo $title;

我读到堆栈溢出,最后添加$将从右到左读取str,但它似乎不起作用。

注意:此外我将使用此正则表达式获取值130pm,1000pm,s2,1(这是动态值)

2 个答案:

答案 0 :(得分:1)

您可以使用以下短正则表达式删除最后四个连字符分隔部分和“.html”文件扩展名:

/(?:-[^-]+){4}\.html$/

非捕获组((?: ... )),由连字符(-)后跟一个或多个非连字符([^-]+)组成,重复四次({4}),然后是一个圆点字符(\. - 注意点是转义的!)和html,最后是行尾($ })。

答案 1 :(得分:1)

作为Regex的替代品,您可以使用explode和array_chunk直接进行此操作

$strArray = explode("-", "Live-tv-channel-nbc-130pm-1000pm-s2-1.html");
$arrayparts   = (array_chunk($strArray, 4));
echo implode("-", $arrayparts[0]);