regex - 发生第 n 次后正则表达式 Oracle 替换
问题描述
我试图在第 n 次发生之前进行匹配,以及它是如何工作的 https://regex101.com/r/wJ9yS6/192
我试图在 oracle regex replace 上应用正则表达式
WITH t AS
(SELECT 'Home|-|Antennas|¿|Directional Antennas|¿|Gain Horn Antennas|¿|Standard Gain Horn Antennas
With Coax Input|¿|10 GHz to 15 GHz WR75 Standard Gain Horn Antennas|¿ WR-75 Waveguide Standard Gain
Horn Antenna Operating From 10 GHz to 15 GHz With a Nominal 15 dB Gain N Female Input'
mycol
FROM dual)
SELECT
REGEXP_REPLACE (mycol, '(^(?:[^|]*\|){7})(.*)', '\1')
FROM t;
但这是我得到的完整字符串我不知道为什么
解决方案
请注意,Oracle 正则表达式不支持非捕获组。您需要改用捕获组。
你可以使用^(([^|]*\|){7}).*
正则表达式(这里不需要最后一组,(.*)
可以写成.*
):
WITH t AS
(SELECT 'Home|-|Antennas|¿|Directional Antennas|¿|Gain Horn Antennas|¿|Standard Gain Horn Antennas With Coax Input|¿|10 GHz to 15 GHz WR75 Standard Gain Horn Antennas|¿ WR-75 Waveguide Standard Gain Horn Antenna Operating From 10 GHz to 15 GHz With a Nominal 15 dB Gain N Female Input'
mycol
FROM dual)
SELECT
REGEXP_REPLACE (mycol, '^(([^|]*\|){7}).*', '\1')
FROM t
输出(见在线演示):
请注意,您在正则表达式测试器中使用了没有换行符的字符串,并且问题中的字符串包含换行符。您可能想要.
匹配任何字符,您需要n
作为第 6 个参数传递:
REGEXP_REPLACE (mycol, '^(([^|]*\|){7}).*', '\1', 1, 0, 'n')
会计。对于文档,n
“允许句点字符 ( .
) 匹配换行符。默认情况下,句点是通配符。 ”。1
将从字符串开始位置开始匹配,并0
启用替换所有匹配项(虽然这里我们只需要一个,你也可以1
在这里使用,但在这里没关系)。
推荐阅读
- javascript - ReactJS CSS 属性重复
- javascript - 如何加载数组以映射到具有多行的列?
- javascript - Datepicker 仅显示上一个日期,而不是最近选择的日期
- python - 如何在二进制文件中创建新行,python
- javascript - 拒绝应用来自 'xxx/style.css' 的样式,因为它的 MIME 类型 ('text/html') 不是受支持的样式表 MIME 类型
- python - 在 Python 3.10 上启动 Spyder IDE 时出错
- python - 列表理解 - 结合重复词的定义,使每个词都是唯一的,但可能有多个定义
- python - 重定向/复制 python 和 kivy 的日志到文本输入
- python - 即使使用全局python也没有定义变量
- r - 为什么 geom_text_repel() 忽略尺寸美学?