2015-11-05 40 views
1

我試圖建立正則表達式在SQL(在這種情況下MySql),將找到所有字符串沒有一個特定的模式,模式是[四希伯來語拉特] - [希伯來字母與空格] - [帶有空格的希伯來字母] - [數字]。SQL正則表達式在希伯來文

我試試這個:不匹配輸入

select ('תשעה-מורי מורים פדגוגיה איכותית מקוון-אשקלון-1096' NOT REGEXP '^[\u05D0-\u05EA]{4}[\s]?\-[\s]?[\u05D0-\u05EA\s]{1,}[\s]?\-[\s]?[\u05D0-\u05EA\s]{1,}[\s]?\-[\s]?[0-9]{1,}$'); 

更多例子:

'3232-בדיקה-ד' 
'בדיקה בדיקה-אילת-123' 

匹配輸入是

'תשעה-בדיקה בדיקה-אשקלון-1111' 
'תשעו-בדיקה נוספת-בת ים-12341' 

在addtiton我不能使用[[:number:]]因爲運行sql的應用程序使用:作爲參數

這一個返回總是1,但我期望得到0;

任何想法?

+0

'四希伯來語laters' - 你的意思*字母*?你能否提供輸入匹配和不符合你的需求? –

+0

是我的意思是字母,不匹配爲 '3232-בדיקה-ד' 或 'בדיקהבדיקה-אילת-123' 匹配輸入是 'תשעה-בדיקהבדיקה-אשקלון-1111' 或「תשעו-בדיקהנוספת-בתים- 12341' 在addtiton中,我不能使用[[:number:]],因爲運行sql的應用程序使用「:」作爲參數 – AviMoto

+0

請[編輯您的問題](http://stackoverflow.com/posts/33541420/編輯)與例子。你能提供更多嗎? –

回答

0

最後這是對我有效的正則表達式 '^ [א-ת] {4} - [א-ת「」0-9a-zA-Z)(,`:] + - [א-ת 「」] + - [0-9] + $'' 感謝托馬斯您的快速響應

0

請注意,字符類不適用於MySQL的REGEXP,除了巧合之外,只有字節比較工作,而不是2字節希伯來語utf8字符。

另一種方法使用HEX。

  • 位數都爲1字節的十六進制3x
  • 希伯來語(至少是常見的字符)都是2字節的十六進制D7xx
  • 空間是十六進制20
  • 破折號是十六進制2D

這些都不是相當完美 - 有比其他字符在我給的十六進制數字和希伯來文。

所以, 「【四個希伯來語laters] - [希伯萊用空格字母] - [希伯萊用空格字母] - [數字]」 是

HEX(col) REGEXP '^(D7..){4}-(D7..|20)+-(D7..|20)+-(3.)+$' 

即假定col只是模式。如果您正在尋找內col的模式:

HEX(col) REGEXP '(..)*(D7..){4}-(D7..|20)+-(D7..|20)+-(3.)+' 

(..)*說,任何數量的十六進制數字pairs`的。 (OK,矯枉過正,但速度更快。)