我是正则表达式的新手。我看到过其他有类似问题的帖子,但正如你在RegEx中所知,即使是点也很重要,所以我在这里发布这个问题是为了在这种特殊情况下寻求帮助。
- 我的SQL列值可以有a-z、a-z和0-9
- 它之间可以有一个点(.(和连字符(-(。这两件事不可能在开始或结束
- 列值中不能有空格、制表符或任何空格
- 它不能以任何特殊字符开头或结尾;甚至连点或连字符都没有
我写了这个查询,它涵盖了第一、第二和第三点,但在第四种情况下失败了。
select * from test_db.xtmp_testtable_invalidchars042321_rg where (sl_id REGEXP '[^[:alnum:]].+$')
**Table column input values**
RaghavGupta
.RaghavGupta
@Raghav.Gupta
"Raghav Gupta"
Raghav Gupta
Raghav#Gupta
Raghav$Gupta
Raghav%Gupta
Raghav*Gupta
Raghav.Gupta
RaghavGupta
RaghavGupta$
RaghavGupta.
RaghavGupta[]
**Query Result**
RaghavGupta
.RaghavGupta
@Raghav.Gupta
"Raghav Gupta"
Raghav Gupta
Raghav#Gupta
Raghav$Gupta
Raghav%Gupta
Raghav*Gupta
Raghav.Gupta
"RaghavGupta "
RaghavGupta[]
您可以将NOT
与匹配的正则表达式一起使用:
select * from test_db.xtmp_testtable_invalidchars042321_rg where (sl_id NOT REGEXP '^[[:alnum:]]+([.-][[:alnum:]]+)*$')
图案与匹配
^
-字符串的开头[[:alnum:]]+
-一个或多个字母数字字符([:alnum:]
是一个与字母和/或数字匹配的POSIX字符类(([.-][[:alnum:]]+)*
-(匹配的捕获组(零次或多次重复[.-]
-一个.
或-
[[:alnum:]]+
-一个或多个字母数字字符$
—字符串结束