2016-12-30 126 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