星号正则表达式:前面的正则表达式无效
Asterisk regular expression : Invalid preceding regular expression
我正在尝试验证入站 CLI 是否匹配以下模式之一:
CLI 开始于:
- +39
- 0039
- 3
- 0[1-9]
所以我写了下面的
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])
时你可以看到错误
通常在RegEx中(例如在JavaScript中,它包含在/
中),你只需要一个\
,但是当RegEx存储在一个字符串中时(无论如何在这种情况下),你需要 2 \
.
如果您有一个 \
,该字符串会尝试根据 \+
创建一个字符(例如 \n
是一个换行符)。您需要第二个 \
来声明第一个 \
不应转换。
答案是正确的,但是在拨号规则中使用 REGEXP 并不是一个好主意。 Dialplan 本身是正则表达式,它有基于 cli
做正则表达式的形式
exten => _s/_39.,n,Noop(do something for cli starting with 39)
所以它更多的星号方式使用拨号方案,而不是正则表达式。
我正在尝试验证入站 CLI 是否匹配以下模式之一:
CLI 开始于:
- +39
- 0039
- 3
- 0[1-9]
所以我写了下面的
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])
时你可以看到错误
通常在RegEx中(例如在JavaScript中,它包含在/
中),你只需要一个\
,但是当RegEx存储在一个字符串中时(无论如何在这种情况下),你需要 2 \
.
如果您有一个 \
,该字符串会尝试根据 \+
创建一个字符(例如 \n
是一个换行符)。您需要第二个 \
来声明第一个 \
不应转换。
答案是正确的,但是在拨号规则中使用 REGEXP 并不是一个好主意。 Dialplan 本身是正则表达式,它有基于 cli
做正则表达式的形式exten => _s/_39.,n,Noop(do something for cli starting with 39)
所以它更多的星号方式使用拨号方案,而不是正则表达式。