【问题标题】:decode this regex [duplicate]解码这个正则表达式[重复]
【发布时间】:2020-04-26 10:20:27
【问题描述】:

我试图理解以下内容,但似乎没有得到具有{1,40} 的正则表达式的最后一部分。总的来说,我知道该模式会尝试匹配特殊字符和其他内容({1,40})

regexp_like(COLUMN,'^['||UNISTR('\0020')||'-'||UNISTR('\0060')||UNISTR('\007B')||UNISTR('\007D')||UNISTR('\007E')||UNISTR('\00C0')||'-'||UNISTR('\00DF')||']'||'{1,40}$')

【问题讨论】:

  • 它是一个量词。前面的标记(这里是一个字符类)将重复 1 到 40 次。
  • '||'在 {1,40} 之前推迟了我,所以我无法确认我的理解。对我来说,这似乎是一个 OR 条件。那么这仍然是前面字符类的量词吗?我不是想挑战,但我仍然有这个疑问。
  • || 是 SQL 字符串连接运算符 - 它不是正则表达式的一部分。
  • || 是 Oracle 中的字符串连接。 "[a-z]"||"{1,40}" 相当于 Java 中的 "[a-b]" + "{1,40}" 或 PHP 中的 "[a-b]" . "{1,40}"
  • 太棒了。我现在完全明白了。谢谢大家的快速解决

标签: sql regex string oracle


【解决方案1】:

regexp_like() 检查字符串是否与作为第二个参数提供的正则表达式匹配。

你的正则表达式看起来像^[...]{1,40}$

  • ^是字符串的开头,$是结尾,所以整个字符串必须匹配正则表达式。

  • [...] 是一个字符类,包含一堆字符代码点。字符串的所有字符都必须属于该列表(禁止使用任何其他字符)。您需要检查它们对应的内容:unicode.org 是您的朋友。对于第一个代码点:

    \0020    space
    \0060    grave accent
    \007B    left curly bracket
  • 最后,{1,40} 是一个量词:字符串的长度必须至少为 1 且最多为 40。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2019-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多