PostgreSQL regexp_replace 与匹配的表达式

2024-04-19

我正在使用 PostgreSQLregexp_replace函数来转义字符串中的方括号、括号和反斜杠,以便我可以将该字符串用作正则表达式模式本身(在使用该字符串之前还对该字符串进行了其他操作,但它们超出了本问题的范围。想法是替换:

[ with \[
] with \]
( with \(
) with \)
\ with \\

关于正则表达式的 Postgres 文档页面 http://www.postgresql.org/docs/9.1/static/functions-matching.html#FUNCTIONS-POSIX-REGEXP陈述如下:

替换字符串可以包含 \n,其中 n 是 1 到 9,以 表示与第n个括号匹配的源子串 应插入模式的子表达式,并且它可以包含 \& 指示匹配整个模式的子字符串应该是 插入。如果需要在文本中添加反斜杠,请写入 \ 替换文本。

However regexp_replace('abc [def]', '([\[\]\(\)\\])', E'\\\1', 'g');产生abc \ def\.

在同一页面的下方,给出了一个示例,该示例使用\\1符号 - 所以我尝试了。

Yet, regexp_replace('abc [def]', '([\[\]\(\)\\])', E'\\\\1', 'g');产生abc \1def\1.

我猜这是预料之中的,但是regexp_replace('abc [def]', '([\[\]\(\)\\])', E'.\\1', 'g');产生abc .[def.]。也就是说,转义适用于标准反斜杠以外的字符。

此时我不知道如何继续。我该怎么做才能真正得到我想要的替代品?


好的,找到答案了。显然,我需要在替换中双重转义反斜杠。另外,我需要E-旧版本 postgres(在我的例子中是 8.3)的搜索模式中的前缀和双转义反斜杠。最终代码如下所示:

regexp_replace('abc [def]', E'([\\[\\]\\(\\)\\\\\?\\|_%])', E'\\\\\\1', 'g')

是的,它看起来很糟糕,但它确实有效:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PostgreSQL regexp_replace 与匹配的表达式 的相关文章

随机推荐

  • CodeIgniter 4 模型->find()

    如果这个问题之前已经问过 我很抱歉 所以我想做的是从我的模型中得到这样的结果 data userModel gt where username myname gt find 我的期望 data id gt 1 username gt myn
  • 仅当 S 和 T 不同时,Func 的 T 才从 lambda 表达式的输出推断出来?

    When S and T是不同的 这有效 public static void Fun
  • SugarORM 从多个表查询?

    我正在为我的 Android 应用程序使用 SugarORM 在我的项目中 我有几个表 我想知道是否有一种方法可以将它们连接到另一个具有多个表中的列的类对象中 如果是 那么示例将非常有帮助 SugarORM 提供了一个用于简单查询的查询生成
  • 在 beforeRemote 远程挂钩内添加过滤器

    我有一个问题 在 Loopback 的文档中找不到答案 说我有一个模型Company和一个模型Employee 之间存在 1Xn 关系Company和它的Employees When api Employees被调用时 服务器返回所有员工
  • Windows 服务应该在哪里写入应用程序数据?

    我们有一个 Windows 服务作为我们软件的一部分 即使没有用户登录系统 它也可以在后台将数据传输到远程数据库 目前 这些数据缓存在 Program Files 目录中 我认为这不是一个好主意 因为它要求我们减少 Program File
  • 编程语言中的协变和逆变有什么区别? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 谁能解释一下协变和逆变的概念 编程语言理论 协方差非常简单 最好从某个集合类的角度来思考List 我们可以参数化 the List具有
  • Xamarin 表单按钮没有边框问题

    我尝试在视图中呈现可点击项目的列表 我想添加一个带有图像和白色边框的按钮 第一个 我发现 StackLayout ViewCell 中的按钮无法渲染边框
  • 如何同时使用 2 个范围滑块?

    我想使用 2 个范围滑块同时根据年龄和身高过滤表中的数据 我已经使用以下方法实现了 2 个范围滑块 年龄和身高 d3 slider js https github com MasterMaps d3 slider and a dc data
  • 身份验证超时无法正常工作

    我有一个 ASP NET 4 网站 我在 web Config 中将身份验证超时设置为 100 分钟 但是当用户使用网站时 网站甚至在 3 分钟后突然提示登录 下面的代码是我的 web Config 文件
  • 寻找成熟的 M-Tree 实现 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个成熟的 java M Tree 实现 甚至任何 M Tree 实现 除了我找到的唯一实现 http en wikipedia
  • Mockito.anyString() 在 Kotlin 中因 NPE 崩溃

    我正在使用浓缩咖啡 我想为内容解析器创建一个模拟响应 当我使用时 when context activity contentResolver query ArgumentMatchers isA Uri class java Argumen
  • famo.us:如何处理 textbox.onchange 事件

    我在famo us 大学上没有看到任何带有文本输入的教程 如何将文本框表面添加到我的应用程序并处理onchange events 有点难以理解你想要做什么 但是让我们从你的第一个问题开始 目前没有 onchange 处理程序选项 因此如果您
  • 为什么 JavaScript 中的数字是不可变的?

    我在这里阅读了问题和答案 javascript 数字 不可变 https stackoverflow com questions 8248568 javascript numbers immutable 但我还不清楚为什么数字 原始类型 是
  • 如何处理重复事件中的 DST 和 TZ?

    dateutil rrule 是否支持夏令时和夏令时 需要类似于 iCalendar RRULE 的东西 如果不是 如何解决这个问题 安排重复事件和 DST 偏移量更改 Imports gt gt gt from django utils
  • 编组无法从 Go 访问的 C 对象

    有一些 C 对象 例如联合体 包含位域的结构体以及其对齐方式与 Go 的 ABI 不同的结构体 无法从 Go 访问 其中一些结构无法更改为可从 Go 代码访问 因为它们是现有库的 API 的一部分 因此 要将这些对象编组到 Go 结构中 我
  • 测试自定义 AuthorizationAttribute 时抛出 NullReferenceException

    我看了一下 如何进行单元测试来测试检查请求标头的方法 https stackoverflow com questions 9263457 how do i make a unit test to test a method that che
  • Docker 卷挂载不存在

    我在 OS X 上运行 Docker 1 11 并试图找出本地卷的写入位置 我通过运行创建了一个 Docker 卷docker volume create name mysql 然后我跑了docker volume inspect mysq
  • Facebook 政策:我的应用程序可以自动将故事发布到我的 Facebook 流吗?

    根据Facebook 平台政策 http developers facebook com policy 您不得预先填写 user message 通过a发送的参数或内容 扩展权限 例如状态 更新或注释 除非用户 之前生成的内容 工作流程 这
  • 仅使用 VBA 宏将可见行的值从一个工作簿复制到新工作簿中

    我有一些宏可以将工作表 2 从现有工作簿复制到新工作簿 此代码按其应有的方式工作 只是存在不应在新工作簿上显示的隐藏行 这是我编写的代码 用于复制工作表并仅粘贴其值 Dim Output As Workbook Dim FileName A
  • PostgreSQL regexp_replace 与匹配的表达式

    我正在使用 PostgreSQLregexp replace函数来转义字符串中的方括号 括号和反斜杠 以便我可以将该字符串用作正则表达式模式本身 在使用该字符串之前还对该字符串进行了其他操作 但它们超出了本问题的范围 想法是替换 with