【问题标题】:Postgres regex begins with ^ and ends with $ using LIKEPostgres 正则表达式以 ^ 开头并使用 LIKE 以 $ 结尾
【发布时间】:2017-10-27 15:42:03
【问题描述】:

新手问题。我正在寻找以字母“R”开头的刺 这行得通:

SELECT *
FROM table
WHERE column LIKE  'R%'

这不是

SELECT *
FROM table
WHERE column LIKE '^R%'

为什么? 也只是好奇,如果我希望它以R 结尾,我使用$?

'%R$'

这里没有很好地解释模式匹配。如果您知道外行的任何其他资源,请分享。谢谢 https://www.postgresql.org/docs/9.3/static/functions-matching.html

【问题讨论】:

  • 你的意思是关于模式匹配的 pg 文档还不够吗?什么对你来说“解释得不好”?
  • 该文档清楚地表明LIKE 有自己的语法,这与使用SIMILAR TO 应用的正则表达式不同。它没有任何地方表明您可以任意混合或匹配,并期望它在任何给定时间知道您想要哪种模式匹配。
  • 通配符不是正则表达式。

标签: sql regex postgresql


【解决方案1】:

手册很清楚LIKE和正则表达式是两个不同的东西。

喜欢

根据手册:

如果字符串与提供的模式匹配,LIKE 表达式将返回 true。 (正如预期的那样,如果 LIKE 返回 true,则 NOT LIKE 表达式返回 false,反之亦然。等效表达式是 NOT(字符串 LIKE 模式)。)

所以,LIKE 在匹配字符串时返回真或假。

% 类似于文件搜索中的*,表示它将匹配零或之后或之前的任何一个。

  • R%R 和后面的任何字符。
  • %R 和 R 之前的任何字符

LIKE是用来代替=的,更多的功能在手册中有说明。

-- Gets zero or any characters before one R
SELECT * FROM table WHERE column LIKE '%R'

-- Gets zero or any characters after one R
SELECT * FROM table WHERE column LIKE 'R%'

喜欢

LIKE 区分大小写,要使其不区分大小写,您可以使用ILIKE

正则表达式

在 postgreSQL 中,对于正则表达式匹配,您使用 ~ 而不是使用 =,并且正则表达式格式符合 POSIX regular expressions 标准

一个例子是:

-- Gets zero or any spaces numbers and text characters before one R
SELECT * FROM table WHERE column ~ '^[\s\w]*[R]{1}$'

-- Gets zero or any spaces numbers and text characters after one R
SELECT * FROM table WHERE column ~ '^[R]{1}[\s\w]*$'

在手册中有对正则表达式所有可用运算符的解释。如何使用正则表达式是另一回事,它在POSIX regular expressions 标准中;这与 PostgreSQL 无关。

【讨论】:

  • 非常有帮助的解释,谢谢。看起来我试图互换使用这两者。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-10
  • 2023-04-05
  • 1970-01-01
  • 2013-06-10
  • 1970-01-01
  • 2019-04-10
相关资源
最近更新 更多