正则表达式 - 用 space 替换单词

regular expression - replace a word by a space

我有这一行,现在不仅要用 space 替换点和下划线。 现在我也将 "German" 一词(不带引号)替换为空行

有人可以帮忙吗?

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']);

感谢@Wiktor Stribiżew

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

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

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

\h*\bGerman\b 匹配零个或多个空格后跟整个单词 "German"(因为 \b 是单词边界,所以不会匹配 "Germanic" 单词)。

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