0

我正在尝试转换此正则表达式:

^.*[^a-z1-9\-].*$

到要在 oracle 数据库查询中使用的正则表达式。name我想要做的是在不同的列中找到包含至少一个字符的所有行a-z0-9-

查询

select * from device where regexp_like(ctnmname, '^.*[^a-z1-9\\-].*$')

返回表中的所有行。

编辑

问题是带有0和转义的正则表达式-。它适用于正则表达式^.*[^a-z0-9-].*$

4

3 回答 3

2

正则表达式本身看起来不错。您可能希望使其区分大小写并包括0

SELECT * FROM device WHERE REGEXP_LIKE(mycolumn, '^.*[^a-z0-9-].*$', 'c');
于 2013-04-17T19:40:47.637 回答
1

由于破折号是字符类中的最后一个,因此您无需转义它:

where regexp_like(ctnmname, '^.*[^a-z1-9-].*$')

然而

where regexp_instr(ctnmname, '[^a-z1-9-]') > 0

可能更容易阅读...

另请参阅SQL 小提琴

于 2013-04-17T19:38:23.800 回答
0
where not regexp_like(ctnmname, '^(\w|-)*$')

小提琴

于 2013-04-17T19:54:54.410 回答