2016-12-30 125 views
1

我有删除任何字母不超过3个字母的代码。preg_replace允许某些字符,删除短字

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

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

其次,preg_replace仅当它们位于字符串中间时才删除短语,所以如果字符串类似于“我喜欢某事”或更糟糕“我喜欢它”,那么“我”和“它”将会待在这。唯一可以正常工作的情况是,当字符串就像“这是某事”(“is”将被从字符串中删除)。

回答

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

+0

它的工作原理,但它输出的额外 ''(空字符串)。这是一个问题,因为$ result将用于搜索我的表,并且当查询中有LIKE'%%'时,它将逐字读取所有内容。它比我迄今为止尝试过的任何东西都好,但我必须摆脱空字符串 – Vortic

+0

@Vortic,没问题 - 替换为:($ re,“”,$ str));一个空的空间,或者简单的空串,如果这是目标? ($重, “”,$ STR));? – sinisake

+0

这显示了发生了什么http://i.imgur.com/IBTrBeh.png基本上,您的代码以某种方式在某处创建空字符串,稍后使用空字符串搜索表(我强调所有空字符串都是红色的)。通常我会忽略那个空字符串,但因为它会导致整个表格被修复。我按照你的建议替换了代码,但结果仍然相同。 – Vortic