【问题标题】:Matching beginning of line in oracle regexp_like [duplicate]匹配oracle regexp_like中的行首[重复]
【发布时间】:2019-04-30 07:24:10
【问题描述】:

我对支持 ^ 作为 oracle 中行锚的开头感到困惑。

以下查询不返回任何内容:

select 1 from dual where regexp_like('1000C', '^[\dA-Z]+$');
select 1 from dual where regexp_like('1000C', '^1[\dA-Z]+$');

开头没有 ^ 的相同查询似乎可以正常工作:

select 1 from dual where regexp_like('1000C', '[\dA-Z]+$');

令我惊讶的是,以下查询也不起作用:

select 1 from dual where regexp_like('1000C', '^1[\dA-Z]+');

但是,如果没有 [\dA-Z]+ , ^ 似乎可以工作:

select 1 from dual where regexp_like('1000C', '^1');

下面的问题是关于 oracle 中的 ^ 的一些讨论: Oracle regex - does not start with and does not end with

以下 oracle 文档似乎也表示支持 ^: https://docs.oracle.com/cd/B13789_01/appdev.101/b10795/adfns_re.htm#1006817

我在https://regex101.com/ 中针对表达式^[\dA-Z]+$ 测试了1000C,它在网站上的所有风格中都正确匹配。

【问题讨论】:

  • 您专注于错误的模式。 Oracle 正则表达式中的括号表达式中不能使用速记字符类,仅此而已。
  • 感谢 Wiktor,您能否提供导致重复的问题?

标签: regex oracle regexp-like


【解决方案1】:

我无法让字符类中的\d\\d 在这里正常工作。但是,[0-9] 似乎有效:

select 1 from dual where regexp_like('1000C', '^1[0-9A-Z]+');

第二个查询有效的原因:

select 1 from dual where regexp_like('1000C', '[\dA-Z]+$');

是否匹配输入字符串中的最后一个C。但是,前面的数字实际上都没有匹配。

【讨论】:

  • @PushpeshKumarRajwanshi 大多数时候,对于正则表达式问题,您确实需要使用确切的工具或语言进行测试。通用的正则表达式答案可能不适用于给定的 SQL 数据库。
猜你喜欢
  • 2015-05-30
  • 2012-12-06
  • 2019-07-21
  • 1970-01-01
  • 2020-08-28
  • 1970-01-01
  • 1970-01-01
  • 2017-07-21
  • 2020-12-28
相关资源
最近更新 更多