【问题标题】:SQL Oracle - Replace character in string between two vowelsSQL Oracle - 在两个元音之间替换字符串中的字符
【发布时间】:2018-02-10 00:03:47
【问题描述】:

我已经阅读了所有 REGEXP_REPLACE 文档,但没有找到任何我想要的东西。我想将两个元音之间的特定字符替换为另一个字符。

例子:

字符串:abcdeZebca 输出:abcdeSebca

字母 Z 被 S 取代,因为它位于两个元音之间。这在 SQL Oracle 中可能吗?

【问题讨论】:

  • 清如泥。字符 b(以及 c 和 d)位于两个元音 a 和 e 之间。 (您不能不同意,抱歉:abcde...;b、c 和 d 在 a 和 e 之间。)也许您的意思是在两个元音之间立即?那么:“specificate”(您可能是指“specific”或“specified”)字符从何而来?他们在一张桌子上吗?它们是用户输入吗?等等。它们应该用什么代替?单个示例不构成问题规范。

标签: sql oracle regexp-replace


【解决方案1】:

我猜你在文档中没有明白关于反向引用的内容:

SELECT
  REGEXP_REPLACE(yourcolumn, '([aeiou])Z([aeiou])', '\1S\2')
FROM 
  yourtable

解释:

[aeiou] 表示匹配任何单个元音。用括号括起来的意思是“记住你在编号槽中找到的东西,从 1 开始”槽在整个表达式中从左到右编号 - 每个(括号表达式)都有自己的编号

因此完整的表达意味着: - 找到任何元音并存储在插槽 1 - 其次是 Z - 后跟任何元音并存储在插槽 2 中

替换字符串是: - 插槽 1 的内容 -S - slot 2 的内容

因此

aZe -> aSe
eZi -> eSi

等等..

【讨论】:

  • 您应该将Z 替换为. ..以匹配两个元音之间的任何字符..
  • 他说他想替换两个元音之间的特定字符,而不是任何字符。我最初的想法是他想将美国化的英语单词更改为 angliciSed 版本.. 如果你明白我的意思:)
  • 鉴于 Oracle 正则表达式的限制,这里有些东西不起作用:将 'eZeZe' 中所有出现的 Z 替换为 S(预期输出:'eSeSe')。在 Oracle 中,这只能分两次完成,不能一次完成。
  • 不错的答案。干得好!谢谢!
  • @Adolfok3 - 它对输入 'eZeZe' 有效吗?那会很有趣!
猜你喜欢
  • 2021-01-20
  • 1970-01-01
  • 2011-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-14
相关资源
最近更新 更多