代码之家  ›  专栏  ›  技术社区  ›  FrustratedWithFormsDesigner

Oracle-确定正则表达式支持的最大大小

  •  6
  • FrustratedWithFormsDesigner  · 技术社区  · 16 年前

    我有一个正则表达式抛出ORA-12733,“正则表达式太长了”。如何确定支持的最大大小?

    (运行Oracle 10.2g)

    更新:

    ^ $ ):

    (^R_1A$|^R_2A$|^R_3A$|^R_4A$|^R_4B$|^R_5A$|^R_5B$ ...

    2 回复  |  直到 12 年前
        1
  •  8
  •   Ian Carpenter    16 年前

    查看regex函数、REGEXP\u SUBSTR、REGEXP\u INSTR&的文档;REGEXP\u REPLACE它对模式有以下引用:

    模式是正则表达式。它通常是一个文本 文字,可以是 数据类型CHAR、VARCHAR2、NCHAR或 NVARCHAR2。 最多可包含512个 字节 . 如果模式的数据类型为 模式的数据类型 来源\u字符。关于 图案`**

    here

        2
  •  1
  •   Abecee    11 年前

    示例regex不应该需要所有的起始/结束锚点。 ^(R_1A|R_2A|R_3A|R_4A|R_4B|R_5A|R_5B)$

    事实上:如果搜索标记与示例中的搜索标记非常相似,那么您可能希望从中受益 ^(R_[1-5]A|R_[4-5]B)$ ^(R_([1-5]A|[4-5]B))$

    11.2验证:

    SELECT i, t FROM (
      SELECT 1 i, 'R_1A' t FROM DUAL UNION ALL
      SELECT 2,   'xR_2A'  FROM DUAL UNION ALL
      SELECT 3,   'R_3Ax'  FROM DUAL UNION ALL
      SELECT 4,   'xR_4Ax' FROM DUAL UNION ALL
      SELECT 5,   'R_4B'   FROM DUAL UNION ALL
      SELECT 6,   'R_5A'   FROM DUAL UNION ALL
      SELECT 7,   'R_5B'   FROM DUAL)
    --WHERE REGEXP_LIKE(t, '(^R_1A$|^R_2A$|^R_3A$|^R_4A$|^R_4B$|^R_5A$|^R_5B$)')
    --WHERE REGEXP_LIKE(t, '^(R_1A|R_2A|R_3A|R_4A|R_4B|R_5A|R_5B)$')
    --WHERE REGEXP_LIKE(t, '^(R_[1-5]A|R_[4-5]B)$')
    WHERE REGEXP_LIKE(t, '^(R_([1-5]A|[4-5]B))$')
    ORDER BY i;