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 与 select 模式
Oracle 正则表达式函数-REGEXP_LIKE 使用例子