Difference between revisions of "M4 Regexp Examples"

From Kolmisoft Wiki
Jump to navigationJump to search
 
(47 intermediate revisions by 5 users not shown)
Line 1: Line 1:
Regexp is used to allow/deny CallerID/Destinations for [[M2 Origination Points | Origination Points]], [[M2 Termination Points | Termination Points]] and [[M2 Dial Peers | Dial Peers]].
Basic Regexp operators and building blocks are explained [https://en.wikipedia.org/wiki/Regular_expression#POSIX_basic_and_extended here].
 
<br><br>
= Regexp for matching =
 
Regexp matching is used in:
 
* [[M4 Origination Points | Origination Points]]
** CLI/ANI Allow (Whitelist)
** CLI/ANI Deny (Blacklist)
** CLD/DNIS Allow (Whitelist)
** CLD/DNIS Deny (Blacklist)
* [[M4 Termination Points | Termination Points]]
** CLI/ANI Allow (Whitelist)
** CLI/ANI Deny (Blacklist)
** CLD/DNIS Allow (Whitelist)
** CLD/DNIS Deny (Blacklist)
* [[M4 Dial Peers | Dial Peers]]
** Source regexp
** Source deny regexp
** Destination Regexp
** Destination deny regexp
 
 
==== Validate regex  ====
 
The regex can be validated using https://regexr.com/ (or any other online regex editor).
 
==== Examples ====


{| border="1" cellpadding="2" cellspacing="0"  
{| border="1" cellpadding="2" cellspacing="0"  
Line 18: Line 46:
| ^370.*$ || anything starting with 370
| ^370.*$ || anything starting with 370
|-
|-
| ^(37[0-1])&#124;(44)[0-9]*$|| only digits starting with 370 or 371 or 44
| ^(37[0-1]&#124;44)[0-9]*$|| only digits starting with 370 or 371 or 44
|-
| ^380(67&#124;97&#124;68&#124;98)[0-9]*$&#124;^998[0-9]+$ || only digits starting with 380(67,97,68,98) or 998(0-9), where 380(67,97,68,98) = 38067,38097,38068,38098 and 998(0-9) = 9980,...,9988,9989.
|-
| ^380(67&#124;97&#124;68&#124;98)[0-9]{5,9}$&#124;^998[0-9]{5,9}$ || only digits starting with 380(67,97,68,98) or 998, but number of digits after each prefix should be between 5 and 9. So, for example, 3809712345 will match, but 380971234 or 380971234567890 will NOT match.
|-
|-
| ^(380(67&#124;97&#124;68&#124;98))&#124;(998[0-9])*$ || only digits starting with 380(67,97,68,98) and 998(0-9), where 380(67,97,68,98) = 38067,38097,38068,38098 and 998(0-9) = 9980,...,9988,9989.
| ^370[138][0-9]+$|| only digits starting with 3701, 3703, 3708
|-
|-
| ^(380(67&#124;97&#124;68&#124;98)){17}&#124;(998[0-9]){16}$ || only digits starting with 380(67,97,68,98) and 998(0-9), but number of digits after each prefix should be exactly 12.
|}
|}


<br><br>
= Regexp for transformation =
Regexp transformation is used in:
* [[M4 Origination Points | Origination Points]]
** CLI/ANI Regexp Transformation Rule
** CLD/DNIS Regexp Transformation Rule
** [https://wiki.kolmisoft.com/index.php/M4_Kamailio_Transformations PAI Transformation]
** [https://wiki.kolmisoft.com/index.php/M4_Kamailio_Transformations RPID Transformation]
* [[M4 Termination Points | Termination Points]]
** CLI/ANI Regexp Transformation Rule
** CLD/DNIS Regexp Transformation Rule
** [https://wiki.kolmisoft.com/index.php/M4_Kamailio_Transformations RPID from OP Transformation]
** [https://wiki.kolmisoft.com/index.php/M4_Kamailio_Transformations PAI from OP Transformation]
==== Format ====
Regexp transformation format is:
'''/match_expression/replacement_expression/flags'''
* match_expression - POSIX regular expression
* replacement_expression - replacement expression with back references (explained [https://wiki.kolmisoft.com/index.php/M4_Kamailio_Transformations#Replacement_Expression here]) to matched tokes: \1, \2, …, \9
* flags (optional):
** i - match ignore case
** g - replace all matches
Before putting Transformations into production, it is advisable to test them on various values.
==== Test in Linux console ====
Execute '''sed''' command (add s before transformation '''s'''/regex/replacement/flags):
echo '00370123456789' | sed -E 's/^00//'
==== Test in online sed live editor ====
If you do not have access to the Linux console, use https://sed.js.org/ (or any other online sed editor).
==== Examples ====
{| style="font-family: monospace; font-size: 13px" border="1" cellpadding="5" cellspacing="0"
| '''Transformation''' || '''Original number''' || '''Modified number''' || '''Comment'''
|-
| /^00// || 003701234567 || 003701234567 || Cut prefix 00
|-
| /^370/8/ || 370123456789 || 8123456789 || Replace 370 with 8
|-
| /\+// || +370123456789 || 370123456789 || Cut + (here + is escaped by \ since it is special regex symbol)
|-
| /\+370/86/ || +370123456789 || 86123456789 || Cut prefix +370, add prefix 86
|-
| /\+?(.*)/+\1/ || 370123456789 || +370123456789 || Add + if it is not present already
|-
| /(.*)/999\1/ || 370123456789 || 999370123456789 || Add 999 in front of any number
|-
| /(.*)/999$CIP\1/ || 370123456789 || 999888370123456789 || $CIP is a variable that contains Code from MNP database (if MNP is used and if number is matched). This variable only works on Destination Transformation Regexp. The example assumes that there is a record in the MNP database with Code 888 for number 370123456789.
|-
|}


<br><br>
<br><br>
= See also =
= See also =
* [[M4 Kamailio Transformations]]
* [[M4 Source Transformation]]
* [[M4 Destination Transformation]]
* Standard: http://en.wikipedia.org/wiki/Regular_expression#POSIX_basic_and_extended
* Standard: http://en.wikipedia.org/wiki/Regular_expression#POSIX_basic_and_extended
* Check your regexp: http://regex101.com/
* Check your regexp: http://regex101.com/

Latest revision as of 08:57, 31 May 2024

Basic Regexp operators and building blocks are explained here.



Regexp for matching

Regexp matching is used in:

  • Origination Points
    • CLI/ANI Allow (Whitelist)
    • CLI/ANI Deny (Blacklist)
    • CLD/DNIS Allow (Whitelist)
    • CLD/DNIS Deny (Blacklist)
  • Termination Points
    • CLI/ANI Allow (Whitelist)
    • CLI/ANI Deny (Blacklist)
    • CLD/DNIS Allow (Whitelist)
    • CLD/DNIS Deny (Blacklist)
  • Dial Peers
    • Source regexp
    • Source deny regexp
    • Destination Regexp
    • Destination deny regexp


Validate regex

The regex can be validated using https://regexr.com/ (or any other online regex editor).

Examples

Regexp Explanation
.* everything
^[0-9]+$ only digits
^[0-9]{9,}$ only digits, number more than 8 digits (9, 10, 11...)
^[0-9]{0,9}$ only digits, number less than 9 digits (1, 2, 3, 4, 5, 6, 7, 8)
^\+?[0-9]+$ optional + sign and only digits
^370[0-9]+$ only digits starting with 370
^370.*$ anything starting with 370
^(37[0-1]|44)[0-9]*$ only digits starting with 370 or 371 or 44
^380(67|97|68|98)[0-9]*$|^998[0-9]+$ only digits starting with 380(67,97,68,98) or 998(0-9), where 380(67,97,68,98) = 38067,38097,38068,38098 and 998(0-9) = 9980,...,9988,9989.
^380(67|97|68|98)[0-9]{5,9}$|^998[0-9]{5,9}$ only digits starting with 380(67,97,68,98) or 998, but number of digits after each prefix should be between 5 and 9. So, for example, 3809712345 will match, but 380971234 or 380971234567890 will NOT match.
^370[138][0-9]+$ only digits starting with 3701, 3703, 3708



Regexp for transformation

Regexp transformation is used in:

Format

Regexp transformation format is:

/match_expression/replacement_expression/flags

  • match_expression - POSIX regular expression
  • replacement_expression - replacement expression with back references (explained here) to matched tokes: \1, \2, …, \9
  • flags (optional):
    • i - match ignore case
    • g - replace all matches

Before putting Transformations into production, it is advisable to test them on various values.

Test in Linux console

Execute sed command (add s before transformation s/regex/replacement/flags):

echo '00370123456789' | sed -E 's/^00//'

Test in online sed live editor

If you do not have access to the Linux console, use https://sed.js.org/ (or any other online sed editor).

Examples

Transformation Original number Modified number Comment
/^00// 003701234567 003701234567 Cut prefix 00
/^370/8/ 370123456789 8123456789 Replace 370 with 8
/\+// +370123456789 370123456789 Cut + (here + is escaped by \ since it is special regex symbol)
/\+370/86/ +370123456789 86123456789 Cut prefix +370, add prefix 86
/\+?(.*)/+\1/ 370123456789 +370123456789 Add + if it is not present already
/(.*)/999\1/ 370123456789 999370123456789 Add 999 in front of any number
/(.*)/999$CIP\1/ 370123456789 999888370123456789 $CIP is a variable that contains Code from MNP database (if MNP is used and if number is matched). This variable only works on Destination Transformation Regexp. The example assumes that there is a record in the MNP database with Code 888 for number 370123456789.



See also