2014-05-20 389 views
0

我正在创建一个正则表达式来根据一些文本动态地查询MySQL数据库。我解析了文本,现在我需要根据文本创建一个正则表达式,该文本将匹配包含文本的前N个字符并至少包含3个字符的字符串。到目前为止,我这样做:正则表达式匹配字符串的前n个字符

var regex = new RegExp('^' + text.substr(0, 3).replace(/[[\]{}()*+?.\\|^$\-,&#\s]/g, '\\$&')); 

工程,以确保前三个字符匹配,但后来我想查询数据库,看看是否有文本的其他任何比赛。例如,如果文本是'测试字符串',我想创建一个正则表达式来匹配数据库中的列,比如'tes','test str','测试字符串'等,直到目前为止正如文中所述。

我不太确定如何标题,所以希望我不会错过任何类似的问题。如果有更好的方法来查询数据库的话,我也可以这么做。

回答

1

在普通的MySQL中,你可以写:

select * from table where column like concat(left(@YOUR_INPUT, 3), '%') and instr(@YOUR_INPUT, column); 

其中@YOUR_INPUT将你手上(不管你把它作为一个参数[这是正确的方式:)]将全文值查询或你把它放在一个MySQL变量中)。

编辑:增加了一个条款,以确保只有匹配包含在输入中的字符串,而不是别人

+0

但不这让喜欢“测试stringggg”或“tesfoo”字符串传递,他们不该在我的例子中?在我的例子中,'tes','test string'和'test str'通过,因为它们是完全在左边原始文本中的字符串。 – user3622734

+0

你说得对,我错过了一半。我编辑了查询,使它成为了诀窍(至少我认为!)。但我没有一个正则表达式,我的方式工作,我只是增加了另一个子句,确保列的值包含在字符串中。这是预期的行为? – Demian

+0

是的,这是我希望它采取行动的方式,谢谢。 – user3622734

相关问题