0

你知道为什么 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/时,模式匹配...

4

1 回答 1

0

我想知道,regexe101 如何匹配,因为您正在寻找带有模式的“...Trident/4.0 ...”,该模式只需要斜杠后的 5 到 9 之间的数字(绝对不包含 4,所以regex101 不应该匹配!)。

无论如何,在纠正这个并删除那些 ?: 和 ?! 修饰符,显然没有被 11gR2(甚至 12c)正确处理,它可以工作:

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\/([4-9]|1[0-9])\.0).*$');
于 2016-04-29T14:03:20.043 回答