这(\.)?\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