我在文本文件中有很多列表,如下所示:
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
.................
我想用每个列表前面的数字替换S01E01
中的所有E01
。我想要的输出:
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);
<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+)/', '1231', $each_value);
}
^(d+)
=> 这是group 1
.捕获(开头的^(和数字(\d(一个或 更多 (+(。([^S])+
=> 这是group 2
.捕获除大写字母 S ([^S]( 一个或多个 (+( 之外的任何内容。(S01E)
=> 这是group 3
.按原样捕获 S01E。(d+)
- 这是group 4
.捕获 (S01E( 之后的数字。
请注意,组号具有基于1
索引,因为组0
是整个正则表达式。
更换部件:
- 替换是
1231
.
后 - 跟
integer
(表示组号(语法称为反向引用。这表示匹配您获得的同一组字符 从匹配该组。
- 因此,将第 1 次、第 2次和第 3次捕获放回位置 他们来自,然后第 4 次捕获替换为第 1 次,这是 替换匹配项中最后一位数字的初始数字。
那么,让我们以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)
(请注意最后一次更改,因为替换1231
末尾的1
。无论如何,字符串的其余部分保持不变。