2013-04-11 112 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

相关问题