使用正则表达式解析字符串以删除前导#并删除不需要的字符

时间:2014-01-14 18:38:14

标签: php regex string parsing

我有这样的字符串(在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

我的解析有一些规则:

  1. 应删除所有LEADING数字(例如530

  2. 应删除所有尾随文件类型(例如.jpg.flv.mp3

  3. 所有特殊字符都应替换为空格(例如_-以及+

  4. 我不熟悉PHP,也不知道我应该使用哪种函数进行此类操作。

    你会怎么做?

4 个答案:

答案 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

Demo

答案 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

有点晚了,但我喜欢这样做以便练习:)