以下正则表达式使用反向引用数字简单地提取匹配文本的一部分:
SELECT regexp_replace('ABCDEFGHIJ','(\w)(\w)(\w)(\w)(\w)(\w)(\w)(\w)(\w)(\w)','\2'); B
但是如何在第九个匹配的子串之外进行反向引用?
以下内容不起作用(返回第一个匹配0),也不会使用$10或${10}:
SELECT regexp_replace('ABCDEFGHIJ','\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)