【问题标题】:ORACLE: How to use regexp_like to find a string with single quotes between two characters?ORACLE:如何使用 regexp_like 查找两个字符之间带有单引号的字符串?
【发布时间】: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 正则表达式不支持环视。
  • 哦,好的。谢谢。

标签: sql regex 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
      

      【讨论】:

        猜你喜欢
        • 2014-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-07
        • 2020-06-03
        相关资源
        最近更新 更多