sql - Postgresql regexp_replace 'g' 标志

标签 sql regex postgresql regexp-replace

我有字符串
[[good|12345]] [[bad1 [[bad2 [[bad3 [[bad4 [[bad5 [[good|12345]]

如果单词后面没有|,我需要杀死[[

我的工作: select regexp_replace('[[good|12345]] [[bad1 [[bad2 [[bad3 [[bad4 [[bad5 [[good|12345]]', '\[\[([^\|]+?(\[\[|\Z))', '\1', 'g')

我得到的: [[good|12345]] bad1 [[bad2 bad3 [[bad4 bad5 [[good|12345]]

我想得到的: [[good|12345]] bad1 bad2 bad3 bad4 bad5 [[good|12345]]

看起来我的正则表达式 [[ 的最后两个符号在正则表达式的下一次迭代中不存在

最佳答案

您应该使用前瞻而不是组:

select regexp_replace('[[good|12345]] [[bad1 [[bad2 [[bad3 [[bad4 [[bad5 [[good|12345]]', '\[\[([^\|]+?(?=\[\[|\Z))', '\1', 'g')

参见 demo SQL fiddle

enter image description here

(?=\[\[|\Z) 仅向前看检查 [[ 的存在,但不消费字符(即匹配并继续遍历字符串)。因此,以下 [[ 仍可用于下一场比赛。

关于sql - Postgresql regexp_replace 'g' 标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32205240/

相关文章:

不接受单个下划线但接受单个字母表的正则表达式

sql - "Incorrect syntax"使用 OVER() 时出错

从表单值生成 php mysql 更新语句

php - Preg_replace的效率

regex - XPath 和正则表达式都不能在 JMeter 3.0 上运行

javascript - PostgreSQL 通过调用 CURRENT_DATE 获取昨天

SQL 地理邻近查询执行时间大约需要一分钟

c# - WCF 到 Entity Framework 将我的日期时间转换为本地时间 - 如何停止?

postgresql - 谁有关于 PostgreSQL 后台进程的文档?

ruby-on-rails - 从 heroku postgresql 拉单表