【问题标题】:No rows returned by REGEXP_LIKEREGEXP_LIKE 没有返回任何行
【发布时间】:2016-04-26 15:14:41
【问题描述】:

当我使用 Online Regex Tester (https://regex101.com/) 对其进行测试时,我的以下表达式与列出的字符串匹配。

表达式:

^(?:[A-Z]{3}[0-9]{3}[a-z]{1}\([0-9]{1,3}\-[0-9]{1,3}\))\+\s?(?:[A-Z]{2}\((?:[0-9]{1,3}((?:\-[0-9]{1,3}(?:\s?\,\s?)?))?)+\)(?:\s?\+\s?)?)*$

字符串输入:

ATL107j(1-132)+XD(133-156)+SP(157-288)+XD(289-432)

如果我使用:

SELECT 1 FROM DUAL WHERE REGEXP_LIKE([String Input], [Expression])

我没有得到任何行。我不确定与 REGEXP_LIKE 相关的表达式有什么问题。我正在使用 Oracle 11gR2

感谢任何帮助。谢谢。

【问题讨论】:

  • 当我在测试站点上尝试输入表达式时,我没有匹配到..也许你错过了什么?
  • 同上...不匹配!
  • 糟糕。对不起。复制了错误的表达式。这是应该在测试站点上使用此字符串输入的正确方法。感谢您查看:^(?:[A-Z]{3}[0-9]{3}[a-z]{1}([0-9]{1,3}\-[0-9]{1 ,3}))\+\s?(?:[A-Z]{2}((?:[0-9]{1,3}((?:\-[0-9]{1,3}( ?:\s?\,\s?)?))?)+)(?:\s?\+\s?)?)*$
  • 仍然不匹配...输入呢?
  • 我知道发生了什么。当我在这里粘贴我的表达式时,它会改变它。

标签: oracle regexp-like


【解决方案1】:

左括号后面的?: 是什么,如(?: ... ) ?这不是正则表达式的 Oracle 风格。如果删除所有 ?: 对,查询将返回一行。在 Oracle 中,?: 按字面意思理解:

SQL> select 1 from dual where regexp_like('?:', '(?:)');

         1
----------
         1
1 row selected.

您必须使用 Oracle 不支持的不同风格的正则表达式功能。

【讨论】:

  • 谢谢 mathguy。我发现了同样的事情。 Oracle 似乎不支持捕获组。再次感谢。
  • 实际上是的,Oracle 确实支持捕获组,只是语法不同。 select regexp_substr('abc-02-e', '^([a-z]+)-(\d+)-.*$', 1, 1, null, 2) from dual; 返回第二个捕获组 '02'(请参阅 regexp 的文档;这里最后一个参数 2 表示应返回哪个捕获组)。
  • 啊!太棒了,再次感谢!
猜你喜欢
  • 2012-01-11
  • 1970-01-01
  • 2018-07-02
  • 2012-03-02
  • 2019-04-24
  • 2014-09-27
  • 2022-01-24
  • 2015-02-11
  • 2012-04-05
相关资源
最近更新 更多