2014-05-20 387 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

相關問題