目前我正在开展一个项目,该项目要求我爆炸并替换各种不同序列的第一个结果,其中一个序列是0-9
的编号方案,这导致了一些问题。
该项目基本上删除了跟踪列表编号,并用所有各种专辑提交的艺术家名称替换它们。
这是一些例子,以及我已经为我已经解决的两个解决方案做了什么。
01 Song Artist - Song Name
01. Song Artist - Song Name
01. Song Name
01 Song Name
所以上面你看到每个结果都有一点不同,主要是顶部和底部不包含一个句点所以我的方法为第三,第四个一个不起作用,这就是那个方法。
if (strpos($middle, '-') !== false) {
// Middle is being loaded outside of this also, I included it here so you could see what it is.
$middle = $songname;
list($before, $after) = explode('.', $middle, 2);
print $after;
// This code removes the first . in play, and returns only the "Artist Name - Song Name" portion.
} else {
// The $title string is the name of the album, not the individual songs.
$middle = $songname;
list($before, $after) = explode('.', $middle, 2);
$exp = explode('–', $title);
$blimg = $exp[0];
print $blimg;
print '-';
print $after;
// This code explodes the first . in an example like "01. Song Name" and returns "Song Name" then we return the first portion of the album title, to collect the artist as well.
}
我可以做些什么来继续这种模式,但对于其他两种标题变体?
答案 0 :(得分:3)
在我看来,你希望在对它们做任何事情之前标准化字符串,以便更容易检查。
<?php
$possibleFormats = [
'01 Song Artist - Song Name',
'01. Song Artist - Song Name',
'01. Song Name',
'01 Song Name'
];
$nameArray = [];
foreach ($possibleFormats as $key => $format) {
// Remove all .
$format = str_replace(".", "", $format);
// Remove all numbers
$format = preg_replace('/[0-9]+/', '', $format);
// Trim whitespace and update $possibleFormats array
$possibleFormats[$key] = trim($format);
// Set the value in the song name array
$nameArray[] = getSongName($format);
}
function getSongName(string $format) : string
{
if (strpos($format, '-') !== false) {
$format = explode('-', $format)[1];
}
return $format;
}
print_r($nameArray);
答案 1 :(得分:1)
如上所述使用正则表达式。这里将是一个带有任何字符和空格的数字
([0-9]{2})(.)?(\s)
您匹配2个号码[0-9]{2}
,后跟任意字符(.)?
中的0或1,后跟空格(\s)
。
然后,我会在-
上爆炸,如果您有一两个结果,请执行trim()
个,并且您将拥有歌曲名称和艺术家,尊敬。