ORACLE:如何使用 regexp_like 查找两个字符之间带有单引号的字符串?

Posted

技术标签:

【中文标题】ORACLE:如何使用 regexp_like 查找两个字符之间带有单引号的字符串?【英文标题】:ORACLE: How to use regexp_like to find a string with single quotes between two characters? 【发布时间】:2021-02-08 16:15:09 【问题描述】:

我需要在数据库中查询所有在字符之间有两个单字的记录。示例:我们是谁。

我有正则表达式 https://regex101.com/r/6MtB9j/1,但它不适用于 REGEXP_LIKE。

试过了

SELECT content
FROM MyTable
WHERE REGEXP_LIKE (content, '(?<=[a-zA-Z])''(?=[a-zA-Z])')

感谢您的帮助!

【问题讨论】:

Oracle 正则表达式不支持环视。 哦,好的。谢谢。 【参考方案1】:

Oracle 正则表达式不支持环视。

在这种情况下,您实际上不需要环视,您可以使用

SELECT content
FROM MyTable
WHERE REGEXP_LIKE (content, '[a-zA-Z]''[a-zA-Z]')

这将起作用,因为REGEXP_LIKE 只尝试一次匹配,如果匹配,则返回 true,否则返回 false(最终,是否获取记录)。

如果您需要替换或提取值,当匹配可能重叠时,环视非常有用。

【讨论】:

【参考方案2】:

如果你只需要一个字符串中的单引号,你可以使用:

内容如 '%''%'

如果他们特别需要是字母,那么你需要一个正则表达式:

regexp_like(content, '[a-zA-Z][''][a-zA-Z]')

或:

regexp_like(content, '[a-zA-Z]\'[a-zA-Z]')

【讨论】:

【参考方案3】:

如果我理解得很好,你可能需要类似的东西

regexp_count(content, '[a-zA-Z]''[a-zA-Z]') = 2.

比如这个

with myTable(content) as
(
    select q'[what's]' from dual union all
    select q'[who's, what's]' from dual union all
    select q'[who's, what's, I'm]' from dual
)        
select *
from myTable
where regexp_count(content, '[a-zA-Z]''[a-zA-Z]') = 2

给予

CONTENT
------------------
who's, what's

【讨论】:

以上是关于ORACLE:如何使用 regexp_like 查找两个字符之间带有单引号的字符串?的主要内容,如果未能解决你的问题,请参考以下文章

Oracle Regexp_like 使用 AND 子句

oracle regexp_like 与 select 模式

Oracle 正则表达式函数-REGEXP_LIKE 使用例子

如何在不使用 regexp_like 的情况下从列中获取整数

Oracle REGEXP_LIKE 和字边界

Oracle regexp_like - 只有某些字符、数字和一个符号