【发布时间】:2016-04-29 13:53:02
【问题描述】:
您知道为什么 Oracle 11g R2 Express Edition (XE) 上的这条 SQL 命令没有返回预期结果吗?
SELECT 'X'
FROM dual
WHERE REGEXP_LIKE('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)', '^.*MSIE [5-8](?:\.[0-9]+)?(?!.*Trident\/(?:[5-9]|1[0-9])\.0).*$');
当我使用站点https://regex101.com/ 时,模式匹配...
【问题讨论】:
-
您应该使用
regexp_substr来获得实际匹配。使用regexp_like会告诉你模式是否匹配。在这种情况下,如果为 true,您将获得x,否则将无行。 -
Oracle 正则表达式引擎不支持前瞻。如果您尝试获取子字符串,我建议您使用
regexp_substr,然后使用regexp_replace替换不必要的部分。如果您只需要与regexp_like匹配行,您可能根本不需要它们。 -
感谢您的回答,但此命令不返回任何内容。因此,对我来说,Oracle 在正则表达式(第二个参数)中无法识别某些内容。但是什么?选择 REGEXP_SUBSTR('Mozilla/4.0 (兼容; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)', '^.*MSIE [ 5-8](?:\.[0-9]+)?(?!.*Trident\/(?:[5-9]|1[0-9])\.0).*$')来自双重的“REGEXP_SUBSTR”;
标签: sql oracle regexp-like