星号正则表达式:前面的正则表达式无效

Asterisk regular expression : Invalid preceding regular expression

我正在尝试验证入站 CLI 是否匹配以下模式之一:

CLI 开始于:

所以我写了下面的

exten => s,n,Set(isita=${REGEX("^(+39|0039|3|0[1-9])" ${cli})})

但是我收到了这个错误:

 Malformed input REGEX(): Invalid preceding regular expression

我的正则表达式有什么问题?

您需要转义 +,改用此 RegEx:

^(\+39|0039|3|0[1-9])

当你Test it on RegExr

时你可以看到错误

通常在RegEx中(例如在JavaScript中,它包含在/中),你只需要一个\,但是当RegEx存储在一个字符串中时(无论如何在这种情况下),你需要 2 \.

如果您有一个 \,该字符串会尝试根据 \+ 创建一个字符(例如 \n 是一个换行符)。您需要第二个 \ 来声明第一个 \ 不应转换。

New RegEx on RegExr

答案是正确的,但是在拨号规则中使用 REGEXP 并不是一个好主意。 Dialplan 本身是正则表达式,它有基于 cli

做正则表达式的形式
exten => _s/_39.,n,Noop(do something for cli starting with 39)

所以它更多的星号方式使用拨号方案,而不是正则表达式。