我有这样的字符串(在PHP中):
5SGs_FreeDVD_StaticBlock_v2.jpg
30SecondPreview_FLV-600.flv
All Over The World_Click+Countoff_Preview.mp3
我想最终得到这些字符串:
SGs FreeDVD StaticBlock v2
Second Preview FLV 600
All Over The World Click Countoff Preview
我的解析有一些规则:
应删除所有LEADING数字(例如5
和30
)
应删除所有尾随文件类型(例如.jpg
,.flv
和.mp3
)
所有特殊字符都应替换为空格(例如_
和-
以及+
)
我不熟悉PHP,也不知道我应该使用哪种函数进行此类操作。
你会怎么做?
答案 0 :(得分:3)
通过三个步骤完成此操作可能更容易(也更清晰):
// remove leading numbers
$str = preg_replace('/^\d+/m', '', $str);
// remove file extensions
$str = preg_replace('/\.(jpg|flv|mp3)/', '', $ret);
// replace special characters
$str = preg_replace('/[[:punct:]]/', ' ', $ret);
输出:
SGs FreeDVD StaticBlock v2
SecondPreview FLV 600
All Over The World Click Countoff Preview
答案 1 :(得分:1)
preg_replace()
是您需要的功能。这样的事情会做到:
$mystring = preg_replace( array( '/^\d+/', '/\.[a-z0-9]+$/', '/[^a-z0-9]/'),
array('', '', ' '),
$mystring);
我传入一个包含三个部分的数组:(1)前导数字,(2),文字.
后跟数字或字母,然后是字符串的结尾,以及(3)全部对于非字母数字字符。这些被(1)没有,(2)没有,和(3)空格所取代。
答案 2 :(得分:1)
preg_replace('/\.[a-zA-Z0-9]+$|^[0-9]+/', '', $string);
preg_replace('/[+_-]+/', ' ', $string);
答案 3 :(得分:1)
以下是我使用preg_replace
$str = '
5SGs_FreeDVD_StaticBlock_v2.jpg
30SecondPreview_FLV-600.flv
All Over The World_Click+Countoff_Preview.mp3';
$rx = array(
'~^\d+~m' => "", // 1.) leading digits (multi-line mode / m-modifier)
'~\.\w+$~m' => "", // 2.) trailing file types at line-end $ (m-modifier)
'~[[:punct:]]+~' => " "); // 3.) punctuation POSIX
echo "<pre>".preg_replace(array_keys($rx), array_values($rx), $str)."</pre>";
输出:
SGs FreeDVD StaticBlock v2
SecondPreview FLV 600
All Over The World Click Countoff Preview
有点晚了,但我喜欢这样做以便练习:)