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

标签 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 结尾的文件。 如何改进这个查询?

最佳答案

这个正则表达式:

\.[cc|h|js|py]

并没有按照您的想法行事。 [] 是一个字符类,所以 [cc|h|js|py] 匹配字符 'c' , 'h', 'j', 'p', 's', 'y ''|' 而不是您要匹配的四个扩展名。如果您想匹配这四个扩展名,那么您需要使用括号来对您的替换进行分组:

\.(cc|h|js|py)

您也没有锚定您的正则表达式,因此它会在您不希望它匹配时匹配 'pancakes.html'。您可以通过添加 $ 将模式锚定到字符串的末尾来解决此问题:

\.(cc|h|js|py)$

并且您的字符串不包含任何 C 风格的转义序列(例如 \n),因此您不需要 E 前缀:

where file ~ '\.(cc|h|js|py)$'

关于regex - 字符串末尾的模式匹配(postgres),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25874953/

相关文章:

sql - 显示一行中的字段

regex - 如何计算单元格是否在 Google 表格中的单词末尾包含 *

java - 恢复 Java 中 string.split() 分割的字符串

java - 正则表达式模式匹配器,如何存储字符串的其余部分

postgresql - 当通过 YUM repo 作为默认守护进程用户安装时如何在 centos 上运行 postgres

unix - 如何删除匹配的行和上一行?

javascript - 另一个选择中的正则表达式选择

sql - 如何在 SQL 中找到所有行的每组最大值?

algorithm - 二维模式匹配的最差时间复杂度

javascript - 查找文件名然后查找匹配的字符串