我試圖建立一個搜索系統和檢索匹配的記錄。在這種情況下..我想讓用戶使用一些特殊的字符準確地建立他們的請求。所以我把這些標誌,然後把它們轉換成一個正確的SQL:
+應轉換RO 和
/應轉換RO OR
「應轉換RO (或)
例如用戶輸入時:「書/筆」 +紙
它應轉換爲SQL WHERE CLA使用:
((MyField的如 「%書%」)OR(MyField的如 「%筆%」))AND(MyField的如 「%紙%」)
我實現這與開關殼體和數組..但我想還有另一種快速的方法來做到這一點(如regEx)。你有解決它的想法嗎?
注1:我應該收集該表達式的所有項並將其保存在另一個表。所以,我需要將它們收集在一個數組中。
注2:條款可以在所有的世界語言寫!從英語到阿拉伯語,波斯語,..可能是中國人!
謝謝PHP:如何分析搜索表達式和檢索值?
0
A
回答
1
有一試:
$str = '"book/pen"+paper';
// First: replace all keywords (assuming they don't contain "/+ by SQL LIKE
$str = preg_replace('#([^"/+]+)#', "(myfield LIKE '%$1%')", $str);
// then replace/by OR
$str = preg_replace("#/#", " OR ", $str);
// then replace + by AND
$str = preg_replace("#\+#", " AND ", $str);
// and finaly replace pair of "" by()
$str = preg_replace('/"([^"]+)"/', "($1)", $str);
echo $str,"\n";
輸出:
((myfield LIKE '%book%') OR (myfield LIKE '%pen%')) AND (myfield LIKE '%paper%')
0
考慮到您的示例「書/筆」+紙,以下步驟應該工作。
$sourceQuery = '"book/pen"+paper';
$targetQuery = preg_replace(
'/^"(.*)[//](.*)"[/+](.*)$/',
'((myfield LIKE "%$1%") OR (myfield LIKE "%$2%")) AND (myfield LIKE "%$3%")',
$sourceQuery);
要在您的源查詢匹配的地方不止一個運營商,使用模式的範圍,例如[\ | +] 閱讀preg_replace匹配任何一種你希望使用的模式。
對於語言問題,而使用非英語語言有你遇到的任何問題。
+0
THX emaillenin..but我應該找到一種方法,可以在所有的搜索表達式,也不只是這樣回答。 – cxForce 2011-02-27 19:58:20
相關問題
- 1. 搜索和正則表達式在PHP
- 2. Lambda表達式和搜索
- 3. php正則表達式來搜索數組鍵和返回值
- 4. 在PHP中搜索正則表達式
- 5. Java正則表達式搜索值
- 6. php&json對象搜索和值檢查
- 7. 如何在正則表達式中搜索部分模式python
- 8. 正則表達式搜索
- 9. Lambda表達式搜索
- 10. MySQL表達式檢索百分比
- 11. 搜索和正則表達式
- 12. 正則表達式和彈性搜索
- 13. 正則表達式搜索和https
- 14. NSTextFinder和正則表達式搜索
- 15. 正則表達式搜索和替換
- 16. 正則表達式搜索和替換
- 17. Awk搜索表達式和OFS
- 18. 正則表達式搜索和Geany
- 19. 正則表達式搜索和VIM
- 20. 正則表達式查詢檢索值
- 21. 使用正則表達式搜索解析和RSS
- 22. python搜索文件和使用正則表達式解析
- 23. Python正則表達式來搜索NOT和AND表達式
- 24. 上檢索搜索子值
- 25. MongoDB的正則表達式搜索的整數值與PHP
- 26. Python正則表達式搜索和替換原始表達式的一部分
- 27. 正則表達式驗證和檢索
- 28. 如何搜索Lua表值
- 29. PHP的正則表達式。搜索詞和詞
- 30. Python的正則表達式搜索和分裂
之間有什麼區別/和」 – emaillenin 2011-02-27 08:01:06
引號意味着括號,將覆蓋定義的運算符優先級在表達,但削減手段或以SQL語法。 – cxForce 2011-02-27 19:19:35