sql regexp in hebrew

时间:2015-11-05 09:55:35

标签: mysql sql regex hebrew

我尝试在sql(在本例中为MySql)中构建Regexp,它将找到没有特定模式的所有字符串,模式是[四个希伯来语laters] - [带有空格的希伯来字母] - [带有白色的希伯来字母空格] - [数字]。

我试试这个:

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' 

另外,我无法使用[[:number:]],因为运行sql的应用程序使用:作为参数

这一个总是返回1,但我希望得到0;

任何想法?

2 个答案:

答案 0 :(得分:0)

最后这是适用于我的正则表达式 '^ [א-ת] {4} - [א-ת“”0-9a-zA-Z)(,`:] + - [א-ת“”] + - [0-9] + $' 感谢托马斯的快速回复

答案 1 :(得分:0)

请注意,除了巧合之外,字符类不适用于MySQL的REGEXP。只有字节比较工作,而不是2字节的希伯来语utf8字符。

另一种方法使用HEX。

  • 数字均为1字节十六进制3x
  • 希伯来语(至少是常见字符)都是2字节的十六进制D7xx
  • 空格为十六进制20
  • 破折号为十六进制2D

那些不太完美 - 我给的十六进制中除了数字和希伯来语之外还有其他字符。

所以,“[四个希伯来语的遗嘱] - [带有空格的希伯来字母] - [带有空格的希伯来字母] - [数字]”是

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

假设col只是模式。如果您在col

中搜索模式
HEX(col) REGEXP '(..)*(D7..){4}-(D7..|20)+-(D7..|20)+-(3.)+'

(..)*表示任意数量的十六进制数字对。 (好的,矫枉过正,但速度更快。)