preg_replace允许某些字符,删除短字

时间:2016-12-30 15:45:19

标签: php string

我有代码删除任何3个字母或更少的字。

$result = trim( preg_replace
("/[^a-z0-9']+([a-z0-9']{1,3}[^a-z0-9']+)*/i","   ",$_POST['query']));

但是有问题。首先,我不知道如何允许某些字符(波兰语是准确的,如ś,ć,ż等)。

其次,preg_replace只有当它们位于字符串的中间时才删除短字,所以如果字符串是“我喜欢的东西”,或者更糟糕的是“我喜欢它”,“我”和“它会留在这里。这种情况正常工作的唯一情况是字符串就像“这就是某种东西”(“is”将从字符串中删除)。

1 个答案:

答案 0 :(得分:1)

我认为这可能是解决方案:

$re = '/\b\w{1,3}\b/u';
$str = 'Ściana jest biała a obraz jest kolorowy it is something';

$result = trim(preg_replace($re,"",$str));
echo $result;
//just in case, per comments, if some unwanted white spaces are left...

$res=preg_replace("%\s{2,}%"," ",$result);
echo $res;

我添加了单词边界,所以小于(或等于)3个字符的所有单词都应该用空格替换,对于波兰字符,你需要u修饰符。请测试并告诉我这是否适合您。

在线测试:https://eval.in/706650