regex - 类似 grep 的 postgres 查询

标签 regex postgresql

使用 ~ 运算符,很容易找到表中列与给定正则表达式模式匹配的所有行:

SELECT description from book where description ~ 'hell?o'
matches lines containing hello or helo

我想在每次出现的模式周围选择一段文本,而不是描述,所以如果一行包含

description = "aaaheloaaabbbhellobbbcccheloccc"

我想要 3 行作为输出:

"aaaheloaaa"
"bbbhellobbb"
"cccheloccc"

我称之为“类似 grep”的查询,因为它可以显示找到匹配项的列的摘录。

最佳答案

尝试这样的事情:

SELECT
  regexp_matches(description,'(.{0,3})('||'hell?o'||')(.{0,3})','g')
FROM
  book
WHERE description ~ 'hell?o'

如果没有 WHERE 子句,您将在没有匹配正则表达式的行中得到 null

关于regex - 类似 grep 的 postgres 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22845222/

相关文章:

javascript - 实数的 ng-pattern 正则表达式

swift - 使用正则表达式在字符串中查找多个引用的单词

javascript - 使用 RegEx 验证和过滤电子邮件地址?

postgresql - Postgres 中的闭合路径和多边形有什么区别?

postgresql - 可以在不使用 C 编写函数的情况下在 postgres 中创建自定义类型吗?

regex - 阿富汗电话号码的正则表达式验证

java - HQL:动态添加JOINS和WHERE部分(ANTLR,正则表达式或String)

sql - 得到一个不同的行及其值

mysql - 即使在使用连接池后如何处理过多的并发连接?

php - 插入前检查 PostgreSQL 表