以下正则表达式仅使用反向引用数字提取匹配文本的一部分:

SELECT regexp_replace('ABCDEFGHIJ','(\w)(\w)(\w)(\w)(\w)(\w)(\w)(\w)(\w)(\w)','\2');
B

但是如何在第九个匹配的子串之外反向引用?

以下将不起作用(返回第一个匹配项 + 0),也不会使用 $10 或 ${10}:
SELECT regexp_replace('ABCDEFGHIJ','(\w)(\w)(\w)(\w)(\w)(\w)(\w)(\w)(\w)(\w)','\10')
A0

注意:为了清楚起见,这个例子被简化了,当然不需要超出反向引用 9。

最佳答案

正如我在评论和@p.s.w.g 的回答中所说,根据 the documentation,这是不可能的。

但是,还有一些其他的 RegEx 函数可能会有所帮助。如果您可以用现实世界的问题更新您的问题,我可以更具体地提供帮助。但这是一个使用 regexp_matches() 解决您最初问题的示例。

SELECT matches[10]
FROM regexp_matches('ABCDEFGHIJ', '(\w)(\w)(\w)(\w)(\w)(\w)(\w)(\w)(\w)(\w)') AS matches;

 matches
---------
 J
(1 row)

关于regex - 如何在 PostgreSQL 正则表达式中使用超过 9 的反向引用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25251854/

10-12 00:22
查看更多