Page tree
Skip to end of metadata
Go to start of metadata

About

Regular Expressions are used throughout FreeSWITCH. See Dialplan_XML for complete examples of the regular expressions used in conditional statements. This page has been built to share useful regular expressions.

 Click here to expand Table of Contents

 

Capturing Values

Matching items in parentheses are captured in variables sequentially named $1, $2, etc. $0 contains the entire pattern.

Examples

Any toll free Number

Matches any toll free number

Example: 8005551212 or 18005551212 or +18005551212 will match and in each case $2 is populated with "8005551212"

Explanation:

 

  • ^ - indicates the beginning of a regular expression (required);
  • ( - indicates the beginning of a regular expression block - blocks are important to define inner expressions so they can be referenced by the variables $1, $2, $3, etc;
  • \+1|1? - indicates optional digits '+1' or '1' (the ? sign defines the literal as optional);
  • ) - closes the block;
  • 8 - matches the literal '8';
  • ( - another block starting;
  • 00|55|66|77|88 - matches 00 or 55 or 66 or 77 or 88 (you guessed right, the | sign is the OR operator);
  • ) - closes the inner block;
  • [2-9] - matches one digit in the range from 2 to 9 (2, 3, 4, 5, 6, 7, 8 and 9), and as you also guessed the [] pair of brackets encloses a range; other range examples: [0-9] matches 0 to 9; [a-z] matches a, b, c, ...z);
  • \d - matches any valid digit (same as [0-9]);
  • {6} - defines the number of occurrences for the previous expression, i.e. exactly 6 digits in the range 0-9. This can also contain a variable number of occurrences, for example to match a sequence of 6 to 9 digits: {6,9}; or to match at least 6 with no maximum: {6,};
  • ) - closes the other block;
  • $ - indicates the end of the regular expression (required);

Any string of exactly seven digits

Matches any string of exactly seven digits

Any string of exactly 10 digits

Matches any string of exactly 10 digits

Any string of exactly 11 digits

Matches any string of exactly 11 digits

A string with prefix of 9 and an additional 11 digits

Matches a string with a prefix of 9 and an additional 11 digits.

Any string of exactly 3 or 4 digits

Matches any string of exactly 3 or 4 digits

Any string from 3 to 5 digits

Matches any string from 3 to 5 digits

Variable number of digits

Matches a variable number of digits after a prefix of '9'

International country codes

NANPA +1NxxNxxXXXX E.164 Dialstring

LNP (Local Number Portability)

Example:

Example:

Clustering vs Capturing

Sometimes, you need to use parentheses to group a set of choices, but you are not interested in saving what is matched. Place a question mark and colon after the opening parenthesis to accomplish this. The example below matches a leading "+" or leading "00", but the matched information is not saved. The second set of parentheses does save information that is matched.

The following example matches a number and saves the information in two pieces as leading characters ($1) and the telephone number ($2).

Parentheses can be nested. When trying to determine which variable holds the matched information, count the opening parentheses from left to right. The first opening parenthesis will store information in $1, the second opening parenthesis will store information in $2 and so on.

In the following example, the first set of parentheses does not store any information.

Greediness

If you do .*? it will be un-greedy (or use \d to only match the numbers if you know it will be a number)

Case Insensitive

To make a match case insensitive, prepend (?i) to your match string.

Further Reading

Regular Expressions are serious business. They are quite useful in computing in general. Here are some other resources for learning more:
http://regexlib.com/Default.aspx
http://www.regular-expressions.info/
http://www.weitz.de/regex-coach/
http://regexlib.com/CheatSheet.aspx
http://www.zytrax.com/tech/web/regex.htm
http://oreilly.com/catalog/9781565922570/
http://perldoc.perl.org/perlreref.html

Test Your Regex

Use fs_cli

See: mod_commands#regex

Online Tools

Simple Perl Script

You can also use the following perl script to test your regular expression, or make some adjustment of regex based on what you need.

  Result:

See Also

regex API command performs pattern matching on the fs_cli

Regular Expression Cheat Sheet: http://overapi.com/regex/