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

时间:2016-03-25 10:42:21

标签: regex asterisk

我正在尝试验证入站CLI是否与其中一种模式匹配:

CLI STARTING WITH:

  • +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

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

2 个答案:

答案 0 :(得分:4)

您需要转义+,而是使用此RegEx:

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

Test it on RegExr

时,您可以看到错误

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

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

New RegEx on RegExr

答案 1 :(得分:0)

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

exten => _s/_39.,n,Noop(do something for cli starting with 39)

因此更多的星号方式使用dialplan,而不是regexp。