首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Regex解析字符串以删除前导#和删除不需要的字符

用Regex解析字符串以删除前导#和删除不需要的字符
EN

Stack Overflow用户
提问于 2014-01-14 18:38:13
回答 4查看 124关注 0票数 0

我有这样的字符串(在PHP中):

代码语言:javascript
复制
5SGs_FreeDVD_StaticBlock_v2.jpg
30SecondPreview_FLV-600.flv
All Over The World_Click+Countoff_Preview.mp3

我想用这些字符串结束:

代码语言:javascript
复制
SGs FreeDVD StaticBlock v2
Second Preview FLV 600
All Over The World Click Countoff Preview

下面是我分析的几条规则:

  1. 应删除所有前导数字(如530)。
  2. 应该删除所有尾随文件类型(如.jpg.flv.mp3)
  3. 所有特殊字符都应替换为空格(如_-+ )。

我不熟悉PHP,也不知道在这种操作中应该使用哪种类型的函数。

你会怎么做?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-01-14 18:42:00

在以下三个步骤中这样做可能更容易(也更干净):

代码语言:javascript
复制
// 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);

输出:

代码语言:javascript
复制
SGs FreeDVD StaticBlock v2
SecondPreview FLV 600
All Over The World Click Countoff Preview

Demo

票数 3
EN

Stack Overflow用户

发布于 2014-01-14 18:43:06

preg_replace()是您需要的函数。像这样的东西会起作用:

代码语言:javascript
复制
$mystring = preg_replace( array( '/^\d+/', '/\.[a-z0-9]+$/', '/[^a-z0-9]/'),
    array('', '', ' '),
    $mystring);

我传递一个包含三个部分的数组:(1)前导数字,(2)一个文字.,后面跟着数字或字母,然后是字符串的结尾,(3)非字母数字字符的捕获-所有。它们被(1)无,(2)空,(3)空取代。

票数 1
EN

Stack Overflow用户

发布于 2014-01-14 18:47:47

代码语言:javascript
复制
preg_replace('/\.[a-zA-Z0-9]+$|^[0-9]+/', '', $string);
preg_replace('/[+_-]+/', ' ', $string);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21121338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档