数组中的多个替换字符

时间:2018-08-08 02:32:56

标签: php regex

我有:

$content = file_get_contents('data.html');
preg_match_all('/<span class="ng-binding">.*?<\/span>/is', $content, $matches);
print_r(array_values(array_unique($matches[0])));

Array
(
    [0] => 3 January 2018 - Month - Month of Circumstances
    [1] => 2 February 2018 - Month - A New Advancement
    [2] => 1 March 2018 - Month - The Threat
    [3] => 31 April 2018 - Month - Month of Prediction 
    [4] => 30 May 2018 - Month - Seven Days
)

如何删除和替换字符,以便最终数组类似于...

Content.2017.S01E01.Month.of.Circumstances.HOTSTAR.mp4
Content.2017.S01E01.A.New.Advancement.HOTSTAR.mp4
Content.2017.S01E01.The.Threat.HOTSTAR.mp4
Content.2017.S01E01.Month.of.Prediction.HOTSTAR.mp4 
Content.2017.S01E01.Seven.Days.HOTSTAR.mp4

2 个答案:

答案 0 :(得分:0)

您可以进行2个preg_replace呼叫,也可以使用preg_replace_callbackpreg_replace。诸如.*-\s*(.*)之类的正则表达式将提供所有内容,直到最后一个-,然后\s*将允许任何其他空白字符。然后,您将在第一个捕获组中拥有自己关心的部分。然后,使用该捕获组可以替换所有非字母数字字符。

$array = array('3 January 2018 - Month - Month of Circumstances',
                '2 February 2018 - Month - A New Advancement', 
                '1 March 2018 - Month - The Threat',
                '31 April 2018 - Month - Month of Prediction',
                '30 May 2018 - Month - Seven Days');
foreach($array as $item) {
    echo preg_replace_callback('/.*-\s*(.*)/', function($match){
        return 'Content.2017.S01E01.' . preg_replace('/\W+/', '.', $match[1]) . '.HOTSTAR.mp4';
    }, $item) . PHP_EOL;
}

注意\w包含下划线,因此,如果您也想替换该特殊字符,请使用包含下划线的字符类代替\W。这应该[\W_](使用量词)完成。

答案 1 :(得分:0)

您可以仅将preg_replacepatternreplacement的数组值一起使用。模式按数组中元素的顺序替换。因此,此代码中的第一个替换用.替换空格,第二个替换将开头和结尾的文本添加到提取的名称中。

$array = array('3 January 2018 - Month - Month of Circumstances',
                '2 February 2018 - Month - A New Advancement', 
                '1 March 2018 - Month - The Threat',
                '31 April 2018 - Month - Month of Prediction',
                '30 May 2018 - Month - Seven Days');
$new_array = array();
foreach ($array as $line) {
    $new_array[] = preg_replace(array('/\s+/', '/^.*?-([\w.]+)$/'),
                                array('.', 'Content.2017.S01E01$1.HOTSTAR.mp4'),
                                $line);
}
print_r($new_array);

输出:

Array
(
    [0] => Content.2017.S01E01.Month.of.Circumstances.HOTSTAR.mp4
    [1] => Content.2017.S01E01.A.New.Advancement.HOTSTAR.mp4
    [2] => Content.2017.S01E01.The.Threat.HOTSTAR.mp4
    [3] => Content.2017.S01E01.Month.of.Prediction.HOTSTAR.mp4
    [4] => Content.2017.S01E01.Seven.Days.HOTSTAR.mp4
)