gpt4 book ai didi

regex - 为什么在使用正先行 (?=...) 时我对 regexp_matches 函数的响应为空

转载 作者:行者123 更新时间:2023-11-29 11:36:33 24 4
gpt4 key购买 nike

为什么以下代码只返回空括号 - {''}。如何让它返回匹配的字符串?

SELECT regexp_matches('ATGCATGCATGCCAACAACAACCTGTCAAGTGAGT','(?=..CAA)','g');

预期输出是:

regexp_matches 
----------------
{GCCAA}
{AACAA}
{AACAA}
{GTCAA}
(4 rows)

但它返回以下内容:

 regexp_matches 
----------------
{""}
{""}
{""}
{""}
(4 rows)

我实际上有一个更复杂的查询,它需要积极的前瞻性以覆盖字符串中所有出现的模式,即使它们重叠也是如此。

最佳答案

好吧,它并不漂亮,但您可以在没有正则表达式或自定义函数的情况下做到这一点。

WITH data(d) as (
SELECT * FROM (VALUES ('ATGCATGCATGCCAACAACAACCTGTCAAGTGAGT')) v
)
SELECT substr(d, x, 5) AS match
FROM data
JOIN LATERAL (SELECT generate_series(1, length(d))) g(x) ON TRUE
WHERE substr(d, x, 5) LIKE '__CAA'
;
match
-------
GCCAA
AACAA
AACAA
GTCAA
(4 rows)

基本上,获取字符串的每五个字母切片并查看它是否与 __CAA 匹配。

您可以将 generate_series(1, length(d)) 更改为 generate_series(1, length(d)-4) 因为最后一个永远不会匹配,但是如果匹配字符串的长度发生变化,您必须记得更新它。

关于regex - 为什么在使用正先行 (?=...) 时我对 regexp_matches 函数的响应为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57364329/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com