PHP preg_replace字边界和点

时间:2013-10-28 19:15:33

标签: php regex preg-replace word-boundary

<?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”,“features”,并且还应删除点。它会移除但留下点。请帮忙。你知道怎么看正确的代码吗?

1 个答案:

答案 0 :(得分:3)

(\.)?\b导致你出现问题 - 一段时间后没有字边界。

请尝试使用此正则表达式:/\b(prod|by|ft|feat(uring)?)(\.|\b)/i

更新:所以,据我所知,您只想替换不会立即跟随更多文字的缩写。

示例:

Prod. whatever - &gt; whatever,但

Prod.whatever - &gt; 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