我尝试在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;
任何想法?
答案 0 :(得分:0)
最后这是适用于我的正则表达式 '^ [א-ת] {4} - [א-ת“”0-9a-zA-Z)(,`:] + - [א-ת“”] + - [0-9] + $' 感谢托马斯的快速回复
答案 1 :(得分:0)
请注意,除了巧合之外,字符类不适用于MySQL的REGEXP
。只有字节比较工作,而不是2字节的希伯来语utf8字符。
另一种方法使用HEX。
3x
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.)+'
(..)*
表示任意数量的十六进制数字对。 (好的,矫枉过正,但速度更快。)