删除除Dot之外的所有符号,并删除大括号内的所有内容

时间:2014-12-10 10:25:56

标签: php regex

我创建seo友好网址固定链接,我有下面的单词,其中包含额外的空格,符号等。

INPUT示例:

software version 1.2.33 !##$%@~_+:";,|}{[];,;#&*^{2014}
Вася Обломов - Многоходовочка! (2014) MP3 [bitsnoop]
Дельфин - Андрей $$ (2014) MP3 [bitsnoop]
Laidback Luke & Uberjak'd – Go (Original Mix) [Hysteria] [bitsnoop]
Bob Dylan - Down In The Groove [320k MP3] [bitsnoop]

所需的输出:

software version 1.2.33
Вася Обломов Многоходовочка MP3
Дельфин Андрей MP3
Laidback Luke Uberjakd Go
Bob Dylan Down In The Groove

我的所作所为:

$string = "ABC (Test1) hello$";
$string = preg_replace("/\([^)]+\)/","",$string); // 'ABC hello$'
$string = preg_replace("/[^ \w]+/", "", $string);

因此,简单来说,我需要移除{}[]()中括号内的翻转,并删除. (dot)以外的所有符号。

P.s:这包含utf8编码的字符串aswel

1 个答案:

答案 0 :(得分:3)

使用下面的正则表达式,然后用空字符串替换匹配的字符。

 *(?:\{[^}]*\}|\[[^\]]*\]|\([^)]*\)|[^\p{L}\p{N}\s.])

DEMO

<强>代码:

$string = <<<EOT
software version 1.2.33 !##$%@~_+:";,|}{[];,;#&*^{2014}
Вася Обломов - Многоходовочка! (2014) MP3 [bitsnoop]
Дельфин - Андрей $$ (2014) MP3 [bitsnoop]
Laidback Luke & Uberjak\'d – Go (Original Mix) [Hysteria] [bitsnoop]
Bob Dylan - Down In The Groove [320k MP3] [bitsnoop]
EOT;
echo preg_replace('~ *(?:\{[^}]*\}|\[[^\]]*\]|\([^)]*\)|[^\p{L}\p{N}\s.])~u', '', $string)

<强>输出:

software version 1.2.33
Вася Обломов Многоходовочка MP3
Дельфин Андрей MP3
Laidback Luke Uberjakd Go
Bob Dylan Down In The Groove

\p{L}匹配来自任何语言的任何类型的字母,\p{N}匹配任何类型的数字。