Sql 找到无效字符时返回的正则表达式

Sql 找到无效字符时返回的正则表达式,sql,regex,Sql,Regex,我使用以下正则表达式检查有效字符列表: ^([a-zA-Z0-9+?/:().,' -]){1,35}$ 我现在需要做的是搜索数据库中使上述正则表达式无效的任何现有列。我正在使用oracle SQLREGEXP\u LIKE命令 我的问题是,当它发现一个字符不在表达式中时,我似乎不能否定上面的表达式并返回一个值 “a-valid-filename.xml”=>这不应返回,因为它是有效的。 “an_invalid-filename.xml”=>我需要找到这些文件,即任何带有无效字符的文件 对我来

我使用以下正则表达式检查有效字符列表:

^([a-zA-Z0-9+?/:().,' -]){1,35}$
我现在需要做的是搜索数据库中使上述正则表达式无效的任何现有列。我正在使用oracle SQL
REGEXP\u LIKE
命令

我的问题是,当它发现一个字符不在表达式中时,我似乎不能否定上面的表达式并返回一个值

“a-valid-filename.xml”
=>这不应返回,因为它是有效的。
“an_invalid-filename.xml”
=>我需要找到这些文件,即任何带有无效字符的文件


对我来说,显而易见的答案是定义一个无效字符列表。。。但这可能是一个很长的列表。

您可以将其与使用否定字符类的以下正则表达式进行匹配:

([^a-zA-Z0-9+?/:().,' -])

这将匹配不在允许的字符列表中的任何单个字符。

您可以通过插入插入插入符号作为第一个字符来否定字符类

例如:

[^y]
以上内容将匹配任何不符合
y

的内容,请尝试以下操作:

where not regexp_like(col, '^([a-zA-Z0-9+?/:().,'' -]){1,35}$')

where regexp_like(col, '[^a-zA-Z0-9+?/:().,'' -]')