我在文本文件中有很多列表,如下所示:
001.Porus.2017.S01E01.The.Epic.Story.Of.A.Warrior.720.x264.mp4
002.Porus.2017.S01E01.Welcome.With.A.Fight.720.x264.mp4
003.Porus.2017.S01E01.Anusuya.Stays.in.Poravs.720.x264.mp4
004.Porus.2017.S01E01.Olympia.Prays.For.A.Child.720.x264.mp4
.................
我想用每个列表前面的数字替换E01
中的所有S01E01
。我想要的输出:
001.Porus.2017.S01E001.The.Epic.Story.Of.A.Warrior.720.x264.mp4
002.Porus.2017.S01E002.Welcome.With.A.Fight.720.x264.mp4
003.Porus.2017.S01E003.Anusuya.Stays.in.Poravs.720.x264.mp4
004.Porus.2017.S01E004.Olympia.Prays.For.A.Child.720.x264.mp4
......................
顺便说一句,我正在使用以下代码;
$list = file("list.txt", FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES);
$string = "";
foreach($list as $index => $entry)
{
$string .= str_pad($index + 1, 3, '0', STR_PAD_LEFT) . "." . $entry . ", ";
}
$string = substr($string, 0 , -2);
$get = explode(",", $string);
$phr = implode("<br>", array_values(array_unique($get)));
print_r($phr);
答案 0 :(得分:0)
<pre>
<?php
$arr = [
'001.Porus.2017.S01E01.The.Epic.Story.Of.A.Warrior.720.x264.mp4',
'002.Porus.2017.S01E01.Welcome.With.A.Fight.720.x264.mp4',
'003.Porus.2017.S01E01.Anusuya.Stays.in.Poravs.720.x264.mp4',
'004.Porus.2017.S01E01.Olympia.Prays.For.A.Child.720.x264.mp4'
];
$your_next_number = "some_number";
$modified_values = [];
foreach($arr as $each_value){
$modified_values[] = str_replace("S01E01","S01".$your_next_number,$each_value);
//$your_next_number = something;some change that you want to make to your next iterable number.
}
print_r($modified_values);
输出
Array
(
[0] => 001.Porus.2017.S01some_number.The.Epic.Story.Of.A.Warrior.720.x264.mp4
[1] => 002.Porus.2017.S01some_number.Welcome.With.A.Fight.720.x264.mp4
[2] => 003.Porus.2017.S01some_number.Anusuya.Stays.in.Poravs.720.x264.mp4
[3] => 004.Porus.2017.S01some_number.Olympia.Prays.For.A.Child.720.x264.mp4
)
更新
您可以将foreach中的代码替换为以下代码。 @ArtisticPhoenix的信用,用于提供此即兴创作和解释。
foreach($arr as $each_value){
$modified_values[] = preg_replace('/^(\d+)([^S]+)(S01E)(\d+)/', '\1\2\3\1', $each_value);
}
^(\d+)
=>这是group 1
。捕获(开头的^)和数字(\ d)一个或
更多(+)。
([^S])+
=>这是group 2
。捕获除大写字母S([^ S])之外的任何其他一个或多个(+)。
(S01E)
=>这是group 3
。照原样捕获S01E。
(\d+)
-这是group 4
。捕获(S01E)之后出现的数字。
请注意,因为组1
是整个正则表达式,因此组号具有基于0
的索引。
替换零件:
\1\2\3\1
。 \
后跟integer
(代表组号)称为反向引用。这表示与您获得的相同字符集匹配
从匹配该组。 因此,我们以001.Porus.2017.S01E01.The.Epic.Story.Of.A.Warrior.720.x264.mp4
作为示例-
(\d+)([^S]+)(S01E)(\d+)
这样匹配=> (001)(.Porus.2017.)(S01E)(01)
因此,替换将其设为(001)(.Porus.2017.)(S01E)(001)
(注意最后的更改是因为替换\1
的末尾有\1\2\3\1
。字符串的其余部分仍然保持不变。