我创建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
答案 0 :(得分:3)
使用下面的正则表达式,然后用空字符串替换匹配的字符。
*(?:\{[^}]*\}|\[[^\]]*\]|\([^)]*\)|[^\p{L}\p{N}\s.])
<强>代码:强>
$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}
匹配任何类型的数字。