2012-02-18 36 views
11

Tôi muốn tách toàn bộ các từ khỏi chuỗi ở bất kỳ đâu trong chuỗi.Dải từ cụ thể từ chuỗi

Tôi đã tạo ra một mảng các từ bị cấm:

$wordlist = array("or", "and", "where", ...) 

Bây giờ tôi dải dòng chữ:

foreach($wordlist as $word) 
$string = str_replace($word, "", $string); 

Vấn đề là các mã trên sẽ loại từ có chứa các từ bị cấm như " cát "hoặc" nhiều hơn ".

+2

Pro-tip : str_replace có thể lấy một mảng, vì vậy bạn chỉ có thể làm 'str_replace ($ wordlist, '', $ string)'. – cmbuckley

Trả lời

17

Đối với điều này bạn có thể sử dụng preg_replace và từ ranh giới:

$wordlist = array("or", "and", "where"); 

foreach ($wordlist as &$word) { 
    $word = '/\b' . preg_quote($word, '/') . '\b/'; 
} 

$string = preg_replace($wordlist, '', $string); 

EDIT: Example.

1

TRY:

$string = preg_replace("\b$word\b", "", $string); 
+0

Điều này dường như không hoạt động .. Ném "Dấu phân tách không được là chữ và số hoặc dấu gạch chéo ngược" –

4

Các str_replace cũng hỗ trợ đầu vào của một mảng. Điều này có nghĩa là bạn có thể sử dụng nó theo cách sau:

str_replace(array("word1", "word2"), "", $string); 

Điều này có nghĩa là tất cả các từ hiện có trong mảng sẽ được thay thế bằng một chuỗi rỗng. Nếu bạn muốn thay thế cụ thể, bạn cũng có thể tạo một mảng thay thế.

Để xóa các từ chính xác trong thiết lập của bạn, tôi khuyên bạn nên thêm dấu cách xung quanh "hoặc" và "ở đâu". Vì bạn sẽ chỉ xóa các từ thực sự chứ không phải các phần của từ.

Tôi hy vọng điều này sẽ hữu ích.

+0

Ý tưởng khoảng trắng là một ý tưởng đơn giản và có khả năng hoạt động trong trường hợp này do các từ được thay thế, nhưng nói chung nó có thể là một vấn đề ở đầu và cuối chuỗi. – cmbuckley

+1

Nhưng điều này không giải quyết được vấn đề được đưa ra: 'cũng chặn các từ có chứa các từ bị cấm như" cát "hoặc" nhiều hơn ". ' –

+2

@NomikOS đọc nửa sau của bài đăng. – cmbuckley

0
$areaname = str_replace(array("to", "the","a","an","in","by","but","are","is","had","have","has"),'',$areaname); 

i sử dụng nó cho việc này và hoạt động tốt

nhưng nó sẽ thêm khoảng trống ở vị trí của những lời này, vì vậy bạn cần phải sử dụng thay thế một lần nữa để chk không gian đôi và loại bỏ chúng

Các vấn đề liên quan