Using Match Patterns in Conditions

Sometimes you may need a rule to check for a condition that matches a  pattern  as opposed to one that simply matches a fixed attribute (for example, “match any file with a three-digit number in its name,” as opposed to “match any file with the number 372 in its name”). Hazel offers an extensive pattern-building interface for just such situations. (You can also use patterns in actions, but the process is a bit different; see  Using Patterns in Actions .)

For the following attributes, you can create patterns by choosing “matches” or “does not match” (or “match”/“do not match,” or “contain match”/“do not contain match,” depending on the context) from the second pop-up menu of the condition:

  • Name

  • Extension

  • Full name

  • Tags

  • Comment

  • Contents

  • Source URL/Address

  • Other

For example, you might create a pattern that means “Name matches any word, followed by a hyphen, followed by any number.”

When you click in the field to edit a “match” or “does not match” pattern, a popover like this one appears:

Fill in the field at the top of this popover with the pattern you want. You can use a combination of plain text you type yourself (to include static elements as part of your pattern) and  tokens —blue bubbles representing any of numerous variables. To add a token to your pattern from the list below, either click it (once) or drag it to the desired position in the pattern.

For instance, in the image above, the pattern specifies a word (any sequence of letters) followed by a hyphen, followed by a number (one or more digits). Using that pattern, the name  blah-123  matches, but not  123-blah  (which doesn’t start with letters),  blah123  (no hyphen after the word) or  blah-blah  (no number at the end).

Here’s what each token matches:

  • “Letter (a),” “Digit (1),” “Letter or Digit (a1),” “Symbol (%)” or “Character (a1%)”:  These tokens each match a  single  character of the type(s) specified. The “Symbol” token matches any punctuation character while “Character” will match any non-blank character.

  • “Word (abc),” “Number (123),” “Letters & Digits (ab12),” “Symbols (%?@)” or “Characters (ab12%?)”:  These tokens each match a  sequence  of characters of the type(s) specified. (That is, “Word” matches any sequence of letters, Number matches any sequence of digits, and so on.)

  • “Anything (…)”:  This token matches any single character  or  group of characters  or  spaces,  including nothing . (It’s thus much like the  *  wildcard in most command-line environments.) If you have a pattern  (123)(…) , then the text  456  matches. The “Number” (123) token matches the  456 , and the “Anything” (…) token matches nothing.

  • “Custom Text (●)”:  This token lets you create your own custom text-based attribute, which is then available to other conditions and actions in this rule. See  Custom Text Attributes  on the  Using Custom Attributes  page.

  • “Custom Date ( )”: This token lets you create your own custom date attribute (that is, a particular date format), which is then available to other conditions and actions in this rule. See  Custom Date Attributes  on the  Using Custom Attributes  page.

When you’re finished building your pattern, click Done to close the popover and continue creating or editing your rule.

Match Pattern Rules and Tips

Although most patterns are self-explanatory, you should be aware of a few special considerations:

  • Patterns are not case-sensitive (even with text you type manually).  A  is the same as  a .

  • When a condition uses the “match”/“matches” or “does not match”/“do not match” instruction in the second pop-up menu, the pattern must match the  full text  of the attribute. If you want to be sure your condition also matches cases with additional text before and/or after your pattern, use the “Anything” (…) pattern token before and/or after your pattern. Using the example above, the text  45blah-123  does not match, because even though the last part after the  45  does match, the pattern has to start from the beginning and encompass everything until the end. Likewise,  blah-123ab  does not match because of the  ab  at the end. To match all these variants, the pattern could be changed to  (…)(abc)-(123)(…) .

  • In contrast to the preceding rule, when a condition uses the “contain match” instruction in the second pop-up menu (available with the “Contents” attribute and some of the “Other” attributes), the pattern only needs to match  part  of the text. (So, if the condition is “Contents contain match (abc)-(123),” that would match a file that contains the text  A#3foo-75zxy , because the string  foo-75 , found within that text, matches the pattern. Also, a space in a “contain match” pattern matches any number of spaces (or other invisible characters).

  • With certain attributes (“Contents” and some of the “Other” attributes) an additional option appears at the bottom of the popover: “Match the ___ occurrence from the beginning/end.” This enables you to specify which occurrence you want to match, if there could be several (for example, “Match the 3rd occurrence from the beginning,” or “Match the 2nd occurrence from the end”). One reason to do this is to match only files that have a certain number of occurrences of a certain pattern—if you say “Match the 3rd occurrence from the beginning” but the file has only two occurrences, it won’t match. Another reason to do this is to create a custom text token (described just ahead) that matches a particular occurrence of a string so that you can refer to it in a later condition or action in your rule. (For example, match the 3rd instance of a custom token representing a phone number, and display that phone number in a notification when the rule runs.)

  • When creating match patterns, it can be especially helpful to use Hazel’s live preview feature (see  Preview a Rule ) to test your pattern as you go.


Editing Date Patterns

Using Custom Attributes

Using Patterns in Actions