# Regular Expressions

You can use forward slashes `//` instead of quotes with the `type://`, `t://` `oracle://`, `o://`, `flavor://`, `ft://`, and `name://` keywords to match those parts of a card using regular expressions.

Regular expressions are very powerful, here are some examples of fancy searches you can make with regular expressions:

- Instants that grant +X/+X boosts
- Creatures that have a tap ability with no other payment
- Cards that mention orcs, but not other words like sORCery or ORChard
- The Thingling cycle

## Scryfall Regex Flavor

Scryfall supports most POSIX regular expression constructs, many are detailed below. Our regular expressions have the following configuration and limits:

- If your expression includes forward slashes `/` they must be escaped: `\\/`
- Scryfall regular expressions are Unicode-aware. The `.` will match characters beyond the ASCII range.
- Backreferences are not supported (`\\1`, `\\2`, etc).
- All regular expressions are case-insensitive (`i`).
- All regular expressions are “multiline” mode (`m`). Line anchors will match paragraphs in Oracle text, instead of the entire block.
- All characters in your expression are significant and whitespace will be matched (sometimes listed as “tight mode”).
- You cannot add configuration to regular expressions on Scryfall. For example `o:/tap/` will work while `o:/tap/gi` will not.
- Scryfall regular expressions are match-only. Scryfall does not support extracting data from capture groups or performing substitutions.
- Scryfall uses only the `\n` character for newlines in all text fields across our entire database. No fields include `\r` or `\f`.
- The Scryfall database does not include bells (`\a`), null-bytes (`\0`), or other esoteric control characters.

## Scryfall Extensions

Scryfall includes the following additional, non-standard regex features:

Syntax | Feature
--- | ---
`~` | An automatic alias for the current card name or “this spell” if the card mentions itself
`\\sm` | Short-hand escape for any mana symbol
`\\ss` | Short-hand escape for any card symbol
`\\spt` | Short-hand escape for a X/X power/toughness expression
`\\spp` | Short-hand escape for a +X/+X power/toughness expression
`\\smm` | Short-hand escape for a -X/-X power/toughness expression

## Atoms

The following atoms are supported:

Atom | Description
--- | ---
`.` | Any single character
`[kf]` | Bracket expression matching a single character which is `k` or `f` (or any other group of literal characters)
`[^kf]` | Bracket expression matching a single character which is not `k` or `f` (or any other group of literal characters)
`[f-k]` | Bracket expression matching a single character which is between `f` through `k` in Unicode, inclusive (or any other range of of literal characters)
`(re)` | A group that matches the expression `re`
`(re|fe)` | A group that matches either the expression `re` or `fe`. `|` is the pipe character
`\\k` | A literal escaped `k` (or any other character)
`k` | The character `k` (or another non-meta character)

## Quantifiers

The following quantifiers are supported:

Quantifier | Description
--- | ---
`*` | A sequence of 0 or more matches of the atom
`+` | A sequence of 1 or more matches of the atom
`?` | A sequence of 0 or 1 matches of the atom
`{M}` | A sequence of exactly `M` matches of the atom, where `M` is a number
`{M,}` | A sequence of `M` or more matches of the atom
`{M,N}` | A sequence of `M` through `N` (inclusive) matches of the atom; `M` cannot exceed `N`
`*?` | Non-greedy version of `*`
`+?` | Non-greedy version of `+`
`??` | Non-greedy version of `?`
`{M}?` | Non-greedy version of `{M}`
`{M,}?` | Non-greedy version of `{M,}`
`{M,N}?` | Non-greedy version of `{M,N}`

## Anchors and Lookarounds

The following anchors/lookarounds are supported:

Anchor | Description
--- | ---
`^` | Matches at the beginning of a line or the beginning of the field
`$` | Matches at the end of a line or the end of the field
`\\b` | Matches the boundary of a word
`(?=re)` | Positive lookahead: matches at any point where a substring matching `re` begins
`(?!re)` | Negative lookahead: matches at any point where no substring matching `re` begins
`(?<=re)` | Positive lookbehind: matches at any point where a substring matching `re` ends
`(?<!re)` | Negative lookbehind: matches at any point where no substring matching `re` ends

## Character Classes

The following character classes are supported:

Class | Description
--- | ---
`\\n` | Matches a newline
`\\s` | Matches any whitespace
`\\d` | Matches a single digit character: `0-9`
`\\w` | Matches any word character: `A` through `z` and `0` through `9`
`\\uHHHH` | Matches a character whose hexadecimal value is `HHHH`, where `HHHH` is exactly four hexadecimal digits