sql 希伯来语正则表达式

sql regexp in hebrew

我尝试为 sql(在本例中为 MySql)构建正则表达式,它将找到所有没有特定模式的字符串,模式是 [四个希伯来语后缀] - [希伯来字母带空格] - [带空格的希伯来字母] - [数字].

我试试这个:

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 使用 : 作为参数

这个 return 总是 1 但我希望得到 0;

有什么想法吗?

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

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

另一种方法使用 HEX。

  • 数字都是1字节十六进制3x
  • 希伯来文(至少是常用字符)都是2字节十六进制D7xx
  • space 是十六进制 20
  • 破折号是十六进制 2D

这些还不是很完美 -- 在我给出的十六进制中有数字和希伯来语以外的字符。

所以,“[四个希伯来语字母] - [带有白色的希伯来字母 spaces] - [带有白色的希伯来字母 spaces] - [数字]”是

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

假设 col 只是模式。如果您正在搜索 col:

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

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