2013-03-03 28 views
6

Tôi muốn tạo một hàm tìm kiếm PHP, nhưng sử dụng các toán tử giống như Google. Ví dụ:Thư viện PHP để phân tích cú pháp toán tử tìm kiếm giống như Google?

these words "this phrase" location:"Los Angeles" operator:something 

Điều quan trọng là các nhà khai thác như vị trí: giá trị hỗ trợ với các không gian trong đó (do đó có dấu ngoặc kép trong ví dụ này), vì vậy tôi không chỉ để một tách hoặc có thể sử dụng thẻ tiêu chuẩn. Tôi tưởng tượng một người nào đó tại một số điểm đã tạo ra một thư viện để làm điều này, nhưng tôi không thể tìm thấy bất kỳ.

Hoặc nếu nó không yêu cầu thư viện, cách tốt nhất để làm điều này là tốt.

Đó chỉ là phân tích cú pháp truy vấn tìm kiếm mà tôi cần; tức là từ truy vấn ở trên, bạn có thể nhận được một mảng bao gồm:

[0] => these 
[1] => words 
[2] => "this phrase" 
[3] => location:"Los Angeles" 
[4] => operator:something 

Từ đó tôi có thể xây dựng chức năng tìm kiếm cho cơ sở dữ liệu.

+0

thế nào về đầu vào riêng biệt cho "vị trí, "điều hành" vv –

+0

[PHP nổ chuỗi, nhưng đối xử với những lời trong dấu ngoặc kép như một từ duy nhất] (http: // stackoverflow. com/questions/2202435/php-explode-the-string-but-treat-words-in-quotes-as-a-single-word) –

+0

@Dagon Tôi muốn có tất cả trong một truy vấn. – Rsaesha

Trả lời

12

Bạn có thể bắt đầu với str_getcsv() và sử dụng dấu cách làm dấu phân cách, nhưng bạn có thể phải xử lý trước vị trí nhà điều hành & để xử lý các trích dẫn trong trường hợp cụ thể đó.

<?php 
$str = 'these words "this phrase" location:"Los Angeles" operator:something'; 

// preprocess the cases where you have colon separated definitions with quotes 
// i.e. location:"los angeles" 
$str = preg_replace('/(\w+)\:"(\w+)/', '"${1}:${2}', $str); 

$str = str_getcsv($str, ' '); 

var_dump($str); 
?> 

đầu ra

array(5) { 
    [0]=> 
    string(5) "these" 
    [1]=> 
    string(5) "words" 
    [2]=> 
    string(11) "this phrase" 
    [3]=> 
    string(20) "location:Los Angeles" 
    [4]=> 
    string(18) "operator:something" 
} 
+0

Hmm, cung cấp cho tôi mảng sau: [0] => những từ này, [1] => từ, [2] => cụm từ này, [3] => vị trí: "Los, [4] => Angeles", [5] => toán tử: một cái gì đó – Rsaesha

+0

Tôi chỉ ra rằng sẽ có logic tiền xử lý cần thiết. Tôi đã thêm một regex tiền xử lý đơn giản. – Coder1

+0

Tuyệt vời! Điều này hoạt động thực sự tốt, và chỉ là những gì tôi đang tìm kiếm. – Rsaesha

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