正则表达式 - 用 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 [...]
在匹配单个符号时效率更高。
我有这一行,现在不仅要用 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 [...]
在匹配单个符号时效率更高。