2014-01-14 35 views
1

運行此表達式時爲什麼會得到0?SQL上的正則表達式問題

SELECT 'Nr. 1700-902-8423. asdasdasd' REGEXP '1+[ ,.-/\]*7+[ ,.-/\]*0+[ ,.-/\]*0+[ ,.-/\]*9+[ ,.-/\]*0+[ ,.-/\]*2+[ ,.-/\]*8+[ ,.-/\]*4+[ ,.-/\]*2+[ ,.-/\]*3+'; 

當文本包含指定的數字(17009028423)時,我需要變爲true。數字之間可以有符號,.-/\。 舉例來說,如果我有號碼17009028423,我需要得到真正當文字是:

  • 1700-902-8423
  • 17-00,902-84.23
  • 170/09-0.28 \ 423
  • 1700..902 842-3
  • 17,0.009028 4 // 2 \ 3

謝謝。

回答

3

您的正則表達式有兩個問題。首先,\]中的反斜槓轉義了]表示字符類的特殊含義。你需要避開你的反斜槓:\\]。另一個問題是-表示範圍[](例如[a-zA-Z])。你也需要逃避,或者像[a-zA-Z-]那樣結束(就像@tenub說的)。加上反斜槓應該逃脫自己,這使得:

SELECT 'Nr. 1700-902-8423. asdasdasd' REGEXP '1[ ,./\\\\-]*7[ ,./\\\\-]*0[ ,./\\\\-]*0[ ,./\\\\-]*9[ ,./\\\\-]*0[ ,./\\\\-]*2[ ,./\\\\-]*8[ ,./\\\\-]*4[ ,./\\\\-]*2[ ,./\\\\-]*3' 

可以check for yourself。 我還刪除了+標誌,以防您只想匹配每個號碼一次。

+2

無需轉義'-'。只要把它放在'[]'的末尾。 ;) – tenub

+0

我們真的可以混淆東西,並使用範圍'[, - /]'爲'[,。/ - ]' – OGHaza

+0

:)是的,我想知道什麼時候有人想出了 – Mifeet