簡體   English   中英

如何在需要的地方使用RLIKE有效地結合LIKE和IN,*和*轉義正則表達式字符?

[英]How can I use RLIKE to effectively combine LIKE and IN, *and* escape regex characters where needed?

我需要弄清楚如何在數據庫中查詢序列A序列B序列C ,但是由於種種限制,這很難導航。

先前的解決方案使用LIKE (例如SELECT * FROM Table WHERE Serial LIKE )-在搜索所有序列( % )或特定序列( Serial A )時效果很好。 但是,我很快發現INLIKE不能在MySql中合並,並且LIKE使用的通配符不夠靈活,無法找到Serial ASerial BSerial C。

(注意:實際的序列有很大的不同,沒有一致的約定-我知道可以使用%通配符找到與這些基本示例一樣簡單的序列)

我立即想到的是改用RLIKE但是某些序列被命名為B + 3東西,並且必須逃避才能找到。 在這里,我以為使用一種轉義字符的方法,例如preg_quote() -但是其中存在系統結構方面的更多問題...


選擇約束模塊

通過查詢數據庫(例如SELECT DISTINCT Serial FROM Table )來填充組合框,用戶可以從中選擇一個序列,然后提交表單。 選定的序列作為GET值傳遞到下一頁。

查看結果模塊

$serial變量的內容作為參數傳遞給SQL查詢,以在頁面上生成結果。 $serial可以由View Results Module所屬的頁面填充,也可以由傳遞給該頁面的GET值填充(如果該模塊在include d之前尚未填充該值,並且沒有GET值,將會引發錯誤)。


這種結構讓我有些困惑。 如果這是由用戶傳遞的,則使用RLIKEpreg_quote()來搜索序列似乎很簡單。 preg_quote()可以在$serial作為參數傳遞之前使用,並且更新的( WHERE Serial RLIKE )查詢應該可以按預期工作。 但是,我仍然不知道如何搜索多個序列。

如果我將$serial指定為(Serial A | Serial B | Serial C)preg_quote()將轉義正則表達式字符並找不到它們。 但是,如果我不使用preg_quote() ,將找不到諸如B + 3序列,因為正則表達式字符未轉義。


我非常感謝您對改進此問題的任何反饋-我已盡力盡可能清楚地解釋了該問題,但由於上下文和約束的復雜性,使其很難處理。 謝謝。

轉義子字符串,而不是最終的正則表達式。

"(" . preg_quote(serialA) . "|" . preg_quote(serialB) . "|" . preg_quote(serialC) . ")"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM