2013-04-11 72 views
3

好吧,我已經有了一些噩夢,所以我鞠躬我愚蠢的頭到Stackoverflow的全能配置單元。Mysql正則表達式與一些特殊字符的字母數字

UPD:我的任務參數已更改。我需要找到可能包含特殊字符(如圓括號()和/或@,#,&,$)的代碼。

所以代碼可能看起來像:

「A」, 「BB」, 「2C8」, 「A7(BO)19」,B29H $,29H(6JI)0#等

問題是,所有這些代碼是可選的。我試着像Barmar(見回覆1)建議,但是稍微對矯正的MySQL查詢:

SELECT * 
FROM table 
WHERE column REGEXP '^[a-z0-9\@\#\$\&()]*$' 
AND column LIKE CONCAT('%', '$v', '%') 

它不能返回我的 「S(LJ)9」 或 「09S(LJ)3 $」 如果我求對於「SLJ」或「S(LJ)」

那麼,除了我的DNA中的一些真正重要的核苷酸序列,這將允許我更有效地使用大腦(或者有它們),我在這個正則表達式或查詢自己? 提前感謝任何人。

+0

用戶輸入的字符__required__是否在值中? – Barmar

回答

2
SELECT * 
FROM table 
WHERE column REGEXP '^[a-z0-9()]*$' /* code contains alphanumerics and parentheses */ 
AND column NOT REGEXP '[0-9]{3}' /* code does not contain >2 digits in a row */ 
AND column LIKE CONCAT('%', ?, '%') /* code contains the user input */ 

哪裏?與用戶輸入綁定(你應該使用PDO或mysqli準備好的語句)。

+0

謝謝,Barmar!用戶最多可以輸入5個代碼,並可以5列隨機滿足。其邏輯是查找所有代碼可以在任何特定列中找到的行:'SELECT * FROM table WHERE ID IN(SELECT ID FROM table WHERE(((col0 REGEXP'^ [\ w()] * $' AND col0 LIKE CONCAT('%','$ v','%'))OR ... OR(col4 REGEXP'^ [\ w()] * $'和col4 LIKE CONCAT('%','$ v ','%')))AND ... AND((col0 REGEXP'^ [\ w()] * $'和col0 LIKE CONCAT('%','$ v5','%'))OR .. OR(col4 REGEXP'^ [\ w()] * $'和col4 LIKE CONCAT('%','$ v5','%'))))和othercol不爲空)'它遺憾地沒有返回 – Rhiozan

+0

Mysql沒有'\ w'和'\ d'正則表達式轉義序列,我改變了我的答案以擴展這些。試試這個表單。 – Barmar

+0

再次感謝Barmar。在你的解決方案的最後一次更新之後,它工作得很好。可悲的是,我正在使用的項目對db中的這種搜索非常敏感。我會盡力掌握正則表達的藝術:) – Rhiozan

相關問題