Search Console's regex filters are RE2 expressions, which is a deliberately smaller syntax than the one most regex tutorials teach. What RE2 leaves out, what to write in place of each missing construct, and the two things a filter does not change.
Search Console's regex filters are RE2 expressions, not PCRE ones. In the Search Analytics API they appear as the includingRegex and excludingRegex operators on a dimension filter, and Google's reference describes each as an RE2 syntax regular expression that must, or must not, be matched. RE2 is deliberately smaller than the syntax most regex tutorials teach: it has no backreferences, no lookahead and no lookbehind, and its case-insensitive flag is off unless the pattern turns it on.
Where do the regex filters actually live?
A Search Console regex filter is a dimension filter, which means it narrows the rows a report returns rather than changing what is measured. In the Search Analytics API a filter carries a dimension, an operator and an expression, and the operator is where regex enters: includingRegex keeps rows whose value matches, excludingRegex drops them. The other operators in that list are literal comparisons, and their case behaviour differs from the regex ones — Google documents notEquals as case-sensitive for the page and query dimensions, for instance, which is the kind of detail that quietly changes a brand-versus-non-brand split.
What does RE2 not have?
RE2 refuses several constructs that are ordinary in Perl-compatible engines, and it refuses them by design rather than by omission: the constructs it drops are the ones whose matching cost cannot be bounded. A pattern using any of them will not silently degrade, it will be rejected, so the practical work is knowing the replacement for each.
Six PCRE habits and the RE2 replacement for each.
Construct
RE2 support
What to write instead
Backreference, written \1 or \g{1}
Not supported
Repeat the group's pattern in full, or split into two filters
Lookahead, (?=re)
Not supported
Add a second including filter to the same filter group
Negative lookahead, (?!re)
Not supported
Pair an includingRegex with an excludingRegex
Lookbehind, (?<=re)
Not supported
Anchor on the literal prefix and match forward from it
Case-insensitive matching
Flag i, default false
Open the pattern with the inline flag group, or spell both cases
Counted repetition above 1000, x{2000}
Rejected
Use an unbounded repetition, which carries no such restriction
1000Maximum repetition count RE2 accepts in the counted forms x{n}, x{n,} and x{n,m}; unbounded repetitions are not restricted.RE2 syntax reference
Search Console will group performance rows by seven dimensions, and searchAppearance is the one that says which result feature an impression came from. It also changes how the totals are aggregated, which is the part that surprises people.
Market4 turns one release note into a changelog page, a blog post, a mail-out and a week of social posts — and then tells you which of them brought anyone back.
No card to start. Cancel from the settings screen, not from an email.
Four filters worth keeping
Brand and non-brand, as a pair. One pattern listing every spelling and misspelling of the brand, used as includingRegex for the brand half and as excludingRegex for the rest. Keeping it as one pattern used twice is what stops the two halves drifting apart.
Question queries. A pattern anchored at the start of the query matching who, what, when, where, why, how, can, does or is, which isolates the queries an answer-shaped page is written for.
One section of the site. An includingRegex on the page dimension, remembering that the page dimension holds the full URL rather than the path, so the pattern has to account for the scheme and host or start matching mid-string deliberately.
Longer queries. A pattern requiring a minimum number of words, which separates the head terms from the long tail without hand-listing anything.
Anchor deliberately in all four. Write the start and end anchors when you mean the whole value, because a pattern with no anchors leaves the matching semantics to the implementation, and you will not be able to tell from a result set which behaviour you got. An anchored pattern that returns nothing is a clear answer; an unanchored one that returns too much is an argument.
Two things a regex filter does not change
A regex filter narrows which rows come back. It does not lift the ceiling on how many. The Search Analytics API accepts a rowLimit between 1 and 25,000 and defaults to 1,000, and a filtered request is subject to exactly the same limit as an unfiltered one, so a heavily filtered report can still be truncated and still needs paging through startRow.
The second thing a filter cannot do is recover data that was never in the report. Queries that were withheld are not hiding behind a filter, and a pattern returning nothing is at least as likely to mean the property holds no data for that period as it is to mean the pattern is wrong. Test a new pattern against a period you already know returns rows before concluding anything about the pattern.
Does Search Console use RE2 or PCRE?
RE2. Google's Search Analytics API reference describes the includingRegex and excludingRegex operators as taking an RE2 syntax regular expression. RE2 guarantees bounded matching time, and the price of that guarantee is that backreferences, lookahead and lookbehind are absent from the language rather than merely discouraged. Patterns copied from a Perl or JavaScript reference that use any of those will be rejected.
Why was my Search Console regex rejected?
Most often because it contains a construct RE2 does not implement: a backreference such as \1, a lookahead written (?=, a negative lookahead written (?!, or a lookbehind written (?<=. The other common cause is a counted repetition with a bound above 1000, which RE2 refuses outright. Rewrite the pattern without the construct, or split the intent across an including filter and an excluding filter.
How do I make a Search Console regex case-insensitive?
Turn the flag on inside the pattern. RE2's i flag means case-insensitive and its default is false, and RE2 supports an inline flag group, so opening the expression with that group applies case-insensitivity to everything after it. The alternative is spelling out both cases in a character class, which works but gets unreadable quickly on a brand name with several spellings.
Does filtering give me more rows of data?
No. A dimension filter chooses which rows are returned; it does not raise the row limit. The Search Analytics API caps a request at 25,000 rows and defaults to 1,000, and that cap applies to filtered and unfiltered requests alike. If a filtered report looks suspiciously round at the bottom, it is truncated, and paging with startRow is how you get the rest.
Search Console has no language dimension. On a site in more than one language you separate the data by page or by country, which means the URL structure you chose for translations decides what you can measure.
A report that arrives every Monday whether or not anything happened teaches its reader to ignore it. Three constraints fix that: alert only above a severity floor, only on kinds worth interrupting somebody for, and only when the finding is new.