Overview

The Run with a user form and parameters macro makes use of regular expressions for pattern matching. Generally, just a simple understanding of regular expressions and a few examples are enough to get by for most use cases. This page has a few simple examples to get started. Use the references for more advanced information. It is recommended to test your regular expressions in one of the well-known regex testing sites such as RegexPlanet or Regex101.

  • Dot or period (.) is a special regex character. If you really want to match on it, you need to escape it with a backslash: \.
  • Don't be confused with generic pattern matching used for file systems for instance. On a file system, *.png means all files ending with .png. That is an illegal regex expression. For regex you need: .*\.png, or to simplify: .*png which finds all files ending in png (not necessarily ending in an extension of PNG).
  • Regex is case sensitive by default. In most cases, use the case insensitive flag: (?i). See one of the examples below.
  • Use the Dotall mode to match across line breaks. 

In dotall mode, the expression . matches any character, including a line terminator. By default this expression does not match line terminators. Dotall mode can also be enabled via the embedded flag expression (?s). (The s is a mnemonic for "single-line" mode, which is what this is called in Perl.)

Simple examples


Value
Regex
Matches
Demonstrates
ABCA.C(tick). matches any single character
ABCA.*(tick)

* indicates 0 or more characters

ABC.*C(tick)
A.BA\.B(tick)Escape special regex characters with backslash if necessary
ABCAB*(error)

Regex is NOT generic matching (smile)

ABCA.+(tick)+ indicates 1 or more
ABCABC.+(error)
ABCABC.*(tick)
ABCDABC.*(tick)
ABC[ABCD](tick)[ ] indicates a class of characters
ABC[ABZ](error)
ABC8[A-Z0-9](tick)

- indicates a range of characters

ABC[AB^C](error)^ in a class means NOT the following character
ABCDEF|ABC(tick)| indicates OR
image.png.*png|.*jpg(tick)
image.jpg.*png|.*jpg(tick)
image.JPG.*png|.*jpg(error)defaults to case sensitive matching
image.JPG(?i).*png|.*jpg(tick)

(?i) indicates case insensitive matching

ABAB(AB)+(tick)() indicates a grouping
ABCD(AB)+(error)
112233\d+(tick)\d for digits
A BA\s*B(tick)\s for whitespace
ABC\S*(tick)\S for non whitespace

\S+(error)Value must have at least 1 non whitespace character
A\S+(tick)
XYZ,ABC,UVW.*\bABC\b.*(tick)Word boundaries. Finding words in a comma or blank separated list using word boundaries
XYZ,ABCD,UVW.*\bABC\b.*(error)
ABC(?m)(^ABC$)|(^ABC,)|(,ABC,)|(,ABC$)(tick)Looking for text matches in a comma separated list by covering all cases: only, start, middle, and end. This uses the multi-line flag: (?m)
XYZ,ABC,UVW(?m)(^ABC$)|(^ABC,)|(,ABC,)|(,ABC$)(tick)
XYZ,ABC DEF,UVW(?m)(^ABC$)|(^ABC,)|(,ABC,)|(,ABC$)(error)


Advanced examples

Value
Regex
Matches
FindDemonstrates
example.txt

^((?!\.png).)*$

(error)(tick)Find string not containing a word. In this example, files that do not have a .png extension
example.png

^((?!\.png).)*$

(error)(error)Find string not containing a word. In this example, files that do not have a .png extension
example.jpeg(?=^((?!\.png).)*$)(?=^((?!\.jpeg).)*$)(error)(error)Find string not containing a word. In this example, files that do not have a .png or .jpeg extension
collateral wholesale retail.*(?=.*\bretail\b.*)(?=.*\bcollateral\b.*).*(tick)
Match exact words anywhere in string. In this case, a blank separated list of labels and both collateral and retail must be included for the match to be successful
wholesale retail.*(?=.*\bretail\b.*)(?=.*\bcollateral\b.*).*(error)
Both are required for a match
merger acquisition.*\b(?:merger|acquisition)\b.*(tick)
Match string containing either word

References