字符串末尾的模式匹配(postgres)

时间:2014-09-16 17:25:30

标签: regex postgresql pattern-matching

假设我有下表(称为文件表),文件名为:

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完成的文件。 如何改进此查询?

1 个答案:

答案 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