我有以下正则表达式,用于检查有效字符列表:
^([a-zA-Z0-9+?/:().,' -]){1,35}$
我现在需要做的是搜索数据库中任何使上述正则表达式无效的现有列。我正在使用oracle SQL REGEXP_LIKE
命令。
我遇到的问题是我似乎无法否定上面的表达式并在找到不在表达式中的字符时返回一个值。
"a-valid-filename.xml"
=>这不应该归还,因为它是有效的
"an_invalid-filename.xml"
=>我需要找到这些,即任何具有无效字符的东西。
对我来说,明显的答案是定义一个无效字符列表......但这可能是一个很长的列表。
答案 0 :(得分:1)
您可以将它与使用[^...]
否定字符类的以下正则表达相匹配:
([^a-zA-Z0-9+?/:().,' -])
这将匹配任何不属于允许的字符列表的单个字符。
答案 1 :(得分:0)
您可以通过插入插入符号作为第一个字符来否定字符类。
示例:
[^y]
上述内容将匹配任何非y
答案 2 :(得分:0)
试试这个:
where not regexp_like(col, '^([a-zA-Z0-9+?/:().,'' -]){1,35}$')
或
where regexp_like(col, '[^a-zA-Z0-9+?/:().,'' -]')