什么是正则表达式允许字母数字字符,空格,中间点,点到底或中间

时间:2016-03-17 09:19:28

标签: sql regex oracle

我是正则表达的新手。我在SQL查询中使用正则表达式。并且希望显示包含以下内容之外的所有记录:字母数字字符,空格,字符串之间的连字符( - ),最后的点(。)和字符串之间。 我能够做到字母数字字符和空格。连字符和点都在制造问题。

例如:" first.name"," firstname。"不应该来,但" .firstname"应该进入结果。

"名字"不应该来,但" -firstname"和"名字 - "应该进入结果。

截至目前,我已经做到了这一点。

SELECT * FROM my_table WHERE  column1 like '.%' or column1  like '-%' or
 regexp_like(column1 ,'[^[:alnum:]^[:blank:]]');

以上查询的工作方式是它允许在字符串中的任何位置使用点和连字符。而不是我想要的地方,如上所述。

任何人都可以帮助我。

4 个答案:

答案 0 :(得分:1)

我创建的表就像你的表和这句话

select * from tmp where x like '.%' OR x like '-%' or x like '%-';

完美无缺 - 只有。而且 - :)

答案 1 :(得分:1)

我确认Michal解决方案:

SELECT * FROM
             (select 'first.name' x from dual
   union all select 'firstname.' from dual
   union all select '.firstname' from dual
   union all select 'first-name' from dual
   union all select 'firstname-' from dual
   union all select 'firs#@tname' from dual
   union all select 'firs  tname' from dual
   union all select '#@hh tname' from dual
   union all select '-firstname' from dual
   union all select 'firstname' from dual)
 where x like '.%' OR x like '-%' or x like '%-'
or (regexp_like(x ,'[^[:alnum:]^[:blank:]]') and x not like '%-%' and x not like '%.%') 
;

导致

.firstname 
firstname- 
firs#@tname
#@hh tname
-firstname 

答案 2 :(得分:1)

我尝试了很多解决方案。最后,下面的内容正如我想要的那样。

SELECT * FROM my_table WHERE (INSTR(column1,'.', 1, 1))=1
or (INSTR(column1,'-', 1, 1))=1 or (INSTR(column1,'-', 1,1)=length(column1))
or (REGEXP_LIKE(column1,'[^[:alnum:]^[:blank:]-.]'));

答案 3 :(得分:1)

我相信这可以写成单个正则表达式而无需求助于LIKE运算符:

SELECT * FROM mytable
 WHERE REGEXP_LIKE(column1 ,'(^[.-]|-$)|[^a-zA-Z0-9 \t.-]')

这里正则表达式正在寻找符合以下模式的任何字符串:

  • .-开头,或以-
  • 结尾
  • 包含字母(a-zA-Z)或数字(0-9)或空格/制表符以外的字符(这是POSIX类[:blank:],而不是{{1 }}这是所有空格)或[:space:].

请参阅SQL Fiddle here。请注意,我使用了与接受的答案中相同的测试数据。