=FormulaProof
1

FormulaProof · Evidence

Execution log

What happens to Müller, José, and 김재성 in a Google Sheets regex

Ran
Engine
Google Sheets (live, via Sheets API v4)
Locale
en_US
Host
Windows_NT 10.0.26200 · Node v24.15.0
Result
24 of 24 as expected
Cell Formula What Google returned
B1 =REGEXMATCH("Muller","^\w+$")

control: an ASCII surname is a word

TRUE
B2 =REGEXMATCH("Müller","^\w+$")

the same surname, spelled correctly

One umlaut is the entire difference.

FALSE
B3 =REGEXMATCH("Müller","^[A-Za-z]+$")

the letter-range everyone writes instead of \w

FALSE
B4 =REGEXMATCH("Smith","^[A-Za-z]+$")

control: the same range on an ASCII surname

TRUE
B5 =REGEXEXTRACT("Zürich, CH","^([A-Za-z]+)")

pull the city out of a location field

The formula that works on Zurich, Boston, and Leeds. This is the one that will be in a real spreadsheet.

Z
B6 =REGEXEXTRACT("Zürich, CH","^(\w+)")

the same extraction with \w instead

Z
B7 =REGEXEXTRACT("José Álvarez","^\w+")

first name from a full name

Jos
B8 =REGEXMATCH("김재성","^\w+$")

a Korean name

FALSE
B9 =REGEXMATCH("Müller","^\p{L}+$")

the Unicode letter class Google says is not supported

Google's wording is 'except Unicode character class matching'. This is the exact construct that phrase describes.

#REF!
B10 =REGEXMATCH("김재성","^\p{L}+$")

the Unicode letter class on a Korean name

#REF!
B11 =REGEXMATCH("MULLER","(?i)muller")

control: case-insensitive matching on ASCII

TRUE
B12 =REGEXMATCH("MÜLLER","(?i)müller")

case-insensitive matching across an umlaut

Ü and ü are the same letter to a person and to a sorting algorithm. The question is whether they are the same letter to this engine.

TRUE
B13 =REGEXMATCH("İSTANBUL","(?i)istanbul")

case-insensitive matching on a Turkish dotted capital

FALSE
B14 =REGEXMATCH("é","^.$")

does a dot match one accented character, or two of something

TRUE
B15 =REGEXMATCH("é","^..$")

or does it take two dots

FALSE
B16 =REGEXEXTRACT("Straße","^.{3}")

take the first three characters of a German word

Str
B17 =REGEXREPLACE("Müller","[^\w]","")

strip everything that is not a word character

A tidy-up formula. It is supposed to remove punctuation.

Mller
B18 =REGEXREPLACE("José","[^A-Za-z]","")

the name-cleaning formula people actually paste

Jos
B19 =REGEXREPLACE("Café ☕ 42","[^\d]","")

strip everything that is not a digit, from a line with an emoji

42
B20 =REGEXMATCH("café au lait","\bcafé\b")

a word boundary next to an accented letter

If é is not a word character, then the boundary falls in the middle of the word.

FALSE
B21 =REGEXMATCH("123","^\d+$")

are full-width digits digits

These arrive from Japanese and Korean input methods, and from Excel files exported by them.

FALSE
B22 =REGEXMATCH("١٢٣","^\d+$")

are Arabic-Indic digits digits

FALSE
B23 =REGEXMATCH("naïve","^[a-z]+$")

lowercase range against a French word

FALSE
B24 =REGEXMATCH("naïve","^[a-zà-ÿ]+$")

the accent-insensitive range people try next

A range over a block of Latin-1. Whether this is even a legal range depends on whether the engine reads the pattern as bytes or as characters.

TRUE

Every row above was written into a real Google Sheet and read back through the Sheets API on 2026-07-11. The case file and this log are in the repository, and the build refuses to run if they disagree.

Why this page exists

Anyone can write that lookahead does not work in Google Sheets. It is in Google's documentation, one link away, and a language model will tell you the same thing in a second.

What almost nobody does is run it. So this page is the run. Each formula above was written into a cell through the Sheets API, and the value in the third column is what came back — not what we expected, not what the documentation says, not what a model predicted.

Some rows are marked observed. Those are cases where we did not know the answer beforehand, so we measured instead of asserting. Guessing and then presenting the guess as a finding is exactly the failure mode this site was built to avoid.

If any formula here changes what it does, the log goes stale and the site refuses to build. Tell us if you find one that is wrong before we do.