Regular Expressions (RegEx) may seem complicated at first, but once you get to know them, you will manage your Google Analytics and Google Tag Manager like never before.
There are a lot of good articles published about Regular Expressions (will mention some later on) and I decided to contribute too. [Updated in 2017]
I will start with theory, so you might want to jump to examples, if you know the basics.
Part 1. RegEx basics
Regular Expression (RegEx) is a string describing a specific text pattern. So instead of having multiple “contains” conditions, you can match different data with just one Regular Expression. Think of it as a shape fitting game for kids – you have to define the hole so only the desired shape could fit.

RegEx ABC
To build a pattern you need to learn the RegEx characters. Here are the characters most frequently used in Google Analytics and Google Tag Manager (GTM).
RegEx | Meaning | Example |
| | or | a|b – matches a or b |
. | any single character | a.c – matches abc, acc, adc, … |
? | zero or one previous character | goo?gle – matches gogle and google, but not gooogle |
* | zero or more previous characters | goo*gle – matches gogle, google, gooogle |
+ | one or more previous characters | goo+gle – matches google, gooogle, but not gogle |
^ | start of the string | ^apple – matches apple juice, but not pineapple |
$ | end of the sting | apple$ – matches pineapple, but not apple juice |
[] | list of items to match to | [a-z] – matches any lowercase letter from a to z b2[cb] – matches b2c, b2b |
() | group elements | Jan(uary)? – matches Jan, January January? – matches Januar, January |
{} | define character count {x}, {x,y} | [0-9]{2} – matches any two number string from 01 to 99 [0-9]{1,3} – matches any number string from 1-999 |
\ | treat RegEx characters like normal characters | \? – matches a question mark, not zero or one character |
How to know you made the RegEx right?
- Test. In Google Analytics you can preview custom Segments and verify Goal setup, as well as test advanced table filters with RegEx option enabled. In GTM just go to preview mode and see if Tags are triggering correctly.
- Use RegEx debuggers – tools that allow you to enter your pattern and test different self-created strings to see if there is a match or not. If you google them, there will be a dozen different tools. One of my favorite is https://www.debuggex.com/ as they have a pretty cool pattern visualization.
Part 2. Regular expressions in practice
Let’s see how and where RegEx can be used.
- Google Analytics Goal Setup
- Google Analytics Custom Segments & Table Filters
- Google Tag Manager Triggers
- View Filters
1) Google Analytics Goals
Regular expression knowledge is a savior for Goal configuration where it’s the most flexible option.
Let’s say the confirmation page is www.example.com/en/ferry-tickets/booking.php?id=1234. “Equals to” and “Begins with” options are unsuitable due to possibly changing language (/en/) and id parameters, so RegEx is the only option left. You can input just booking, but this matches also www.example.com/en/booking-rules, so to match exactly booking.php you need to include the extension, better with a backslash before a dot to match a dot, not any character (remember, a dot is a RegEx character).
More complicated example – let’s say there are a few Thank you pages, each for a specific service, and you want to configure separate Goals for them.
/en/service1/?sid=1234&success=1 – Goal 1
/en/service2/?sid=2345&success=1 – Goal 2
By having “success” as a pattern, it matches both pages. So pattern for Goal 1 should be more specific, for example (.*)/service1/(.*)success.
Here I’ve defined to look for the URLs that have “/service1/” in the beginning or the middle of the URL following “success” after “/service1/” with possibly other characters in between. Of course, this is not the only solution, much will depend on the URL structure you have.
2) Google Analytics Custom Segments & Table Filters
For me, the most frequent use of regular expressions while filtering data with Table Filters or Segments is to filter only few specific values.
2.1) Filter traffic Sources and Campaigns
For example, to create a segment with only direct / (none) and google / organic traffic . Yes, it’s possible to have 2 “contains” conditions, but RegEx will be a more elegant solution – just use the pipe (|).
When using the pipe, don’t forget about grouping. For example google / cpc|organic will filter traffic sources that match google / cpc or all containing organic, so bing / organic also will be included.

If you want to filter only google / cpc and google / organic don’t forget to use grouping. Correct regex would be google / (cpc|organic).

Or maybe you want to make a segment with specific campaign traffic. For example, you could have this campaign structure and you need to select only Search non-branded campaigns.
Search_Campaing_brand_EN
Search_Campaing1_nonbrand_EN
Search_Campaing2_nonbrand_EN
GDN_Campaing1_nonbrand_EN
Search.*nonbranded will match all the campaign names with “Search” and “nonbranded” with other names and parameters between (.* – matches any character in any quantity), before or after them.
Same could be done to filter report table. Just input the regex pattern in the search field.
2.2.) Filter specific content
Few more examples with page filters in the Content report. Let’s presume you want to get all the blog posts that have one of the following link structures.
Structure 1: /lang/blog-post-name/post-id/ (example: /en/how-to-become-analytics-ninja/12/ )
RegEx would be /en/(.*)/[0-9]+/ – contains /en/ with any characters after and at least one number (post id) or more as the 3rd URL directory. Again, you can just input the pattern directly in the search field or click to advanced filter.
Structure 2: /yyyy/mm/blog-post-name/ (example: /2014/12/how-to-become-analytics-ninja/)
RegEx would be /[0-9]{4}/[0-9]{2}/ – contains a 4 number string representing a year and a 2 number string representing a month.
Similarly, you can filter only selected landing pages, website sections and etc.
3) Google Tag Manager Triggers
With Triggers you control when to launch different Tags. Often, to separate different URLs, links or other elements, conditions like “contains” are not enough and you need to define a specific pattern with Regular Expressions.
3.1) All pages or (.*)
If you are using Google Tag Manager you probably have seen this. Dot means any character, asterisk – none or more previous (that is any) characters. So the pattern matches any text string, that is all pages. (All pages Trigger is available by default, no need to create it manually).
3.2) Home Page
Pattern for a homepage usually would be ^/$. In human language it means “starts and immediately ends with /”.
As URL variable contains domain name and possible query parameters (that is what goes after ?), better to use Page Path (Make sure you have it enabled in your GTM Account, under Variables > Enabled Built-In Variables).

If the page is multilingual, homepage can be also /en, /en/, /lv or /lv/. The pattern then would be ^/(lv|en)?/?$.

Looks complicated, right? :) To describe this pattern in plain English – the Page Path path must:
- ^/ – start with a slash;
- (lv|en)? – can have either one or none of lv or en;
- /?$ – must end with a / or nothing.
The question mark is the one that says “one or none characters” and () brackets are used to group elements. See the nice visualization of this RegEx below.

3.3) Link patterns
To track all links to pdf documents you may use “contains pdf” condition and for tracking all outgoing links use “does not contain mydomain.com”. But sometimes more complicated patterns are required.
For example, I want to separately track my social profile link clicks. The links are:
http://www.twitter.com/apasters
https://plus.google.com/+AleksandrsPasters
http://lv.linkedin.com/in/aleksandrspasters
Also, I know that social sharing buttons may have similar strings in them (in bold), like https://plus.google.com/share?url=http://www.apasters.com/blog/7-things-to-consider-for-google-analytics-friendly-website-development/
So the pattern needs to be specific – after some tests I’ve come up this this one .*(twitter|plus.google|linkedin).com/([A-Za-z/+]+)asters$

To explain the pattern:
- Can start with anything (can define it more specific if you wish).
- Mandatory Group 1 can contain one of the three values – twitter, plus.google or linkedin.
- Must contain .com/ after the website name. (For simplicity I left the dot unescaped, that means it will match any single character)
- Mandatory Group 2 can contain letters (both upper- and lowercase), slash or a plus sign.
- Must end with the last letters of my surname. Could have used the full surname, but as in G+ has it capitalized, would need to use RegEx (ignore case) option then.
3.4) Custom Event Triggers
If you want to have one Trigger for multiple Custom Events, you can use regex matching and input Event name pattern. Here the pattern is case-sensitive, so be careful with values.

4) View Filters
View Filters may be not the most frequently visited place in Google Analytics, but surely an important one as they define data collection.
Let’s say the webpage has the following pattern /en/section-name/page-name, but one of the sections, for some reasons, has a different one /section-name/en/page-name. With a regular expression you can match this “wrong” URI and rewrite it.

Using round brackets you create RegEx groups for the 3 Request URI parts: first must contain at least one letter or a dash; seconds must be en; third – zero or more letters, numbers or dashes.
Few more examples of Filter usage with RegEx – add a hostname to Content report links or exclude traffic based on IP ranges.
Important: use a test View first to make sure all works as intended, as collected data changes made with Filters could not be undone.
Other RegEx resources
Instead of any closing wisdom, I better share some more useful resources to check.
Theory:
- About regular expressions by Google
- Video – Regular Expressions Explanation
- Regular Expressions Cheat Sheet for Google Analytics by Loves Data
Theory with Examples:
- Regular Expressions: Don’t Use Google Analytics Without Them by annielytics
- Nice Regular Expression presentation (pdf) by LunaMetrics
- Practical Guide to Regex in Google Data Studio by optimizationup.com
Examples:
- Video – How to Use RegEx with Google Tag Manager & Google Analytics by Measureschool
Tools:
- https://www.debuggex.com/ and http://regexpal.com/ for RegEx debugging
Fun:
- Google Analytics RegEx desktop wallpaper (to impress colleagues with RegEx learning determination)
- One more reason to learn RegEx :)
Note: This article was first published on Jan 24st 2015 and updated in 2017.
[cover photo by markus spiske]
Good article. Thank you Aleksandrs.
Simply awesome! This gives a great breakdown of some basic patterns and serves as a launch point. Now I’m really starting to understand.
The table explains what each symbol does in plain English, and the examples are actually usable in my work.
This is so helpful. Nice to get an explanation that’s well written and so straightforward that it’s easy to understand. Most articles on regex and GTM are not!
Thanks Aleksandrs
Thanks! Glad you found it useful.
Hi aleksandrs,
Thanks for the article. I have a question: we have a multilangual website, for example: http://www.example.com/nl/.
I want to track the the NL site seperatly into GA, using GTM, but I’m not getting the code installed correctly, is still measures all website traffic. Is is because of the GA code, or does the GTM trakcing installed incorrectly? Below a screenshot of the settings:
PagePath > Matches RegEx > ^/(lv|nl)?/?$
Page Hostname > Contains > http://www.example.com
Please help me out!
Regards,
Reinier
Hi,
Would need more information to propose something specific, but in your case maybe it will be enough just to have “Page Path starts with /nl/”. Or if you have multiple language versions and want to track them within different Properties, you can:
1) JS variable with language version – get lang from the URL (see the code here)
2) Lookup Table by language variable just created to return the language specific GA properly
Thanks a lot, really useful article. It helped me to determine home page in particular for scroll tracking tag :)
I have for example
http://www.example.com/en
http://www.example.com/en-AU
http://www.example.com/en-CA
http://www.example.com/fr-FR
http://www.example.com/de-DE
http://www.example.com/pt-PT
plus
http://www.example.com/en/about
http://www.example.com/en-AU/help
http://www.example.com/en-CA/help
http://www.example.com/fr-FR/faq
http://www.example.com/de-DE/login
http://www.example.com/pt-PT/register and so on….
I have a tag created to add dynamic titles to each of these pages. What I need is to make default titles and fire on all these occurances because there are more as per countries.
What will be RegeX pattern to detect:
/en
/en-AU
/en/
/fr-FR/
/es-DE/ etc.
Please help
Thanks!
Hi, matching URL Path with ^/(en|fr|es) should work.
Thank you for publishing the Homepage filter with the single slash. I just kept returning everything with a slash in it (so the whole site : ) ).
Great page thanks very much.
I was working on GTM trigger for homepage and also had to ensure to include any UTM params. I think you can also use Page Url with the following regex:
^.*website.com($|\/$|\?.*)
See here for details:
https://regex101.com/r/hcG2lq/1
Hi,
Thanks! Yes, good point if using Page URL, as with Page Path query parameters would be omitted from the value matched by RegEx.