Regex用于识别字母数字值以外的值,字母数字值之间可以有连字符或点,但不能在开头或结尾



我是正则表达式的新手。我看到过其他有类似问题的帖子,但正如你在RegEx中所知,即使是点也很重要,所以我在这里发布这个问题是为了在这种特殊情况下寻求帮助。

  1. 我的SQL列值可以有a-z、a-z和0-9
  2. 它之间可以有一个点(.(和连字符(-(。这两件事不可能在开始或结束
  3. 列值中不能有空格、制表符或任何空格
  4. 它不能以任何特殊字符开头或结尾;甚至连点或连字符都没有

我写了这个查询,它涵盖了第一、第二和第三点,但在第四种情况下失败了。

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:]]+-一个或多个字母数字字符
  • $—字符串结束

相关内容

  • 没有找到相关文章