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.

SEE ALSO

Editing Date Patterns

Using Custom Attributes

Using Patterns in Actions