1
<?php
$name = 'malines featuring. malines2 featuring malines3 feat. malines4 feat malines5';
$name = preg_replace('/\b(prod|by|ft|feat(uring)?)(\.)?\b/i', '', $name);
?>

这段代码删除了“prod”、“by”、“ft”、“feat”、“featuring”,并且应该也用点删除。它删除但留下点。请寻求帮助。您知道如何查看正确的代码吗?

4

1 回答 1

3

(\.)?\b给您带来了问题 - 一段时间后立即没有单词边界。

试试这个正则表达式:/\b(prod|by|ft|feat(uring)?)(\.|\b)/i

更新:所以,据我了解,您只想替换没有立即跟随更多文本的缩写。

例子:

Prod. whatever-> whatever,但是

Prod.whatever-> Prod.whatever(没有变化)。

这个对吗?如果是这样,那么这个解决方案怎么样?仅当下一个字符不是字母时才替换它。你可以使用:

/\b(prod|by|ft|feat(uring)?)\b(?!\.[a-z])\.? */i

我进行了以下测试并得到了评论中指示的结果。如果这对您不起作用,请告诉我。

$regex = '/\b(prod|by|ft|feat(uring)?)\b(?!\.[a-z])\.? */i';
$rep = '';

echo preg_replace($regex, $rep, 'prod. bla')." <br/>"; // bla
echo preg_replace($regex, $rep, 'prod.bla')." <br/>"; // prod.bla
echo preg_replace($regex, $rep, 'feat bla')." <br/>"; // bla
echo preg_replace($regex, $rep, 'feat. bla')." <br/>"; // bla
echo preg_replace($regex, $rep, 'feat.bla')." <br/>"; // feat.bla
echo preg_replace($regex, $rep, 'featuring bla')." <br/>"; // bla
echo preg_replace($regex, $rep, 'featuring.bla')." <br/>"; // featuring.bla
于 2013-10-28T19:18:55.423 回答