DialogFlow CX 为 REGEX 实体抛出 "Regular expression match too broad" 错误

DialogFlow CX throwing "Regular expression match too broad" error for REGEX ENTITIES

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

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

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

“正则表达式匹配太宽泛。” 如果您定义的 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”的一个或多个数字或none
    • [.]表示只会匹配“.”
    • [0-9]+表示匹配“0”到“9”中的一个或多个数字

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

  • 0.23
  • .23
  • 123.4567

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