PHP preg_replace单词边界和点


PHP preg_replace word boundary and dot

<?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","featureing",并且还应该删除点。它删除但留下点。请帮忙。您知道应该如何查看正确的代码吗?

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