【问题标题】:DialogFlow CX throwing "Regular expression match too broad" error for REGEX ENTITIESDialogFlow CX 为 REGEX ENTITIES 抛出“正则表达式匹配范围太广”错误
【发布时间】:2021-07-07 09:35:34
【问题描述】:

我尝试为值定义一个 DialogFlow CX 自定义实体,例如“0.23”使用正则表达式选项并输入以下正则表达式:[+]?([.]\d+|\d+([.]\d+)?)

但是 DiglogFlow CX 不会接受这个 Regex 并抛出错误Validate entity failed because of the following reasons: Regular expression match is too broad: [+]?([.]\d+|\d+([.]\d+)?)

我在很多很多其他正则表达式示例中都有这个问题。为什么我不能像上面那样使用正则表达式?这一点都不宽泛,对吧?这完美地定义了我需要的非常具体的数字格式。看来我有点不明白这一切......?!

【问题讨论】:

    标签: regex dialogflow-cx


    【解决方案1】:

    “正则表达式匹配范围太广。” 如果您定义的 regular expression 的模式不够具体 - 这可能会导致它几乎匹配任何内容或匹配无限具有相同模式的值。

    例如,您的正则表达式 [+]?([.]\d+|\d+([.]\d+)?) 可以将多个数字与示例模式匹配:

    • 2.34
    • 0.123 231.1231 .145 …

    对于您的用例,您可以考虑改用@sys.number system entity。 @sys.number 匹配任何序数和基数,包括小数。

    但是,如果您更喜欢使用正则表达式实体,您可以使用以下语法之一来接受十进制数:

    • ^[+]?([.]\d+|\d+([.]\d+)?)$

      • ^ 表示文本的开头

      • $ 表示文本结束

        注意:^ 和 $ 符号可防止正则表达式匹配具有相同模式的无限值。前任。 23.23 13.31 23.12 0.113 …

    • [0-9]*[.][0-9]+

      • [0-9]* 表示它将匹配从“0”到“9”的一个或多个数字或不匹配
      • [.] 表示只会匹配“.”
      • [0-9]+ 表示将匹配从“0”到“9”的一位或多位数字

    上面的语法将匹配这些格式:

    • 0.23
    • .23
    • 123.4567

    Dialogflow 使用 Google RE2 syntax 表示正则表达式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多