Regex – Matching Up to the First Occurrence of a Character

regex

I am looking for a pattern that matches everything until the first occurrence of a specific character, say a ";" – a semicolon.

I wrote this:

/^(.*);/

But it actually matches everything (including the semicolon) until the last occurrence of a semicolon.

Best Answer

You need

/^[^;]*/

The [^;] is a character class, it matches everything but a semicolon.

^ (start of line anchor) is added to the beginning of the regex so only the first match on each line is captured. This may or may not be required, depending on whether possible subsequent matches are desired.

To cite the perlre manpage:

You can specify a character class, by enclosing a list of characters in [] , which will match any character from the list. If the first character after the "[" is "^", the class matches any character not in the list.

This should work in most regex dialects.

Note: The pattern will match everything up to the first semicolon, but excluding the semicolon. Also, it will match the whole line if there is no semicolon. If you want the semicolon included in the match, add a semicolon at the end of the pattern.

Related Question