正则表达式 - 用空格

时间:2016-01-28 13:09:31

标签: regex preg-replace

我有这条线,现在不仅要用空格替换点和下划线。 现在我也会将“德语”(不带引号)替换为空行

有人可以帮忙吗?

preg_replace('/\(.*?\)|\.|_/i', ' ',

最好的注册

修改

public function parseMovieName($releasename)
        {
$cat = new Category;
if (!$cat->isMovieForeign($releasename)) 
        {
preg_match('/^(?P<name>.*)[\.\-_\( ](?P<year>19\d{2}|20\d{2})/i', $releasename, $matches);
            if (!isset($matches['year'])) 
preg_match('/^(?P<name>.*)[\.\-_ ](?:dvdrip|bdrip|brrip|bluray|hdtv|divx|xvid|proper|repack|real\.proper|sub\.?fix|sub\.?pack|ac3d|unrated|1080i|1080p|720p|810p)/i', $releasename, $matches);
            if (isset($matches['name'])) 
        {
$name = preg_replace('/\(.*?\)|\.|_/i', ' ', $matches['name']);
$year = (isset($matches['year'])) ? ' ('.$matches['year'].')' : '';
                return trim($name).$year;
            }
    }
return false;
}

字符串例如是“movieName German 2015”,但输出应为“movieName 2015”(不带引号)

解决:

现在将行preg_replace('/\(.*?\)|\.|_/i', ' ', $matches['name']);更改为$name = preg_replace('/\h*\bGerman\b|\([^()]*\)|[._]/', ' ', $matches['name']);

谢谢@WiktorStribiżew

1 个答案:

答案 0 :(得分:1)

要添加替代组,您只需使用

$name = preg_replace('/\h*\bGerman\b|\([^()]*\)|[._]/', ' ', $matches['name']); 
                       ^^^^^^ ^^^^^^^

请注意,\h仅匹配水平空格(无换行符),如果您需要换行符,请使用\s

\h*\bGerman\b匹配零个或多个空格后跟一个完整的单词&#34;德语&#34; (因为\b是一个单词边界,没有&#34;日耳曼语&#34;单词将匹配)。

此外,(\.|_)在此模式匹配的结果中等于[._],但匹配单个符号时,字符类[...]的效率会更高。