假设我有下表(称为文件表),文件名为:
file
something.h
something.cc
somethingelse.js
something.py
something.xkh
something.jpeg
我尝试了以下查询:
select file
from filetable
where file ~ E'\.[cc|h|js|py]';
查询输出为:
file
something.h
something.cc
somethingelse.js
something.py
something.xkh
something.jpeg
但是,我只需要完全使用.cc,.h,.js,.py完成的文件。 如何改进此查询?
答案 0 :(得分:5)
这个正则表达式:
\.[cc|h|js|py]
不符合您的想法。 []
是一个字符类,因此[cc|h|js|py]
匹配字符 'c'
,'h'
,'j'
,'p'
,{ {1}},'s'
和'y'
而不是您要匹配的四个扩展程序。如果您想匹配这四个扩展名,那么您希望使用括号对替换进行分组:
'|'
你也没有锚定你的正则表达式,所以当你不想要它时它会匹配\.(cc|h|js|py)
。您可以通过添加'pancakes.html'
来将模式锚定到字符串的末尾来解决这个问题:
$
并且您的字符串不包含任何C样式的转义序列(例如\.(cc|h|js|py)$
),因此您不需要\n
前缀:
E