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.)+'
(..)*
表示任意数量的十六进制数字对。 (好吧,矫枉过正,但速度更快。)
我尝试为 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.)+'
(..)*
表示任意数量的十六进制数字对。 (好吧,矫枉过正,但速度更快。)