Regex whitespace word boundary

I have this expression

\b[A-Za-z]+\b

If I give abc@de mnop, it matches abc, de and mnop, but I want it to match only mnop. How can I do that?


Solution 1:

\b is a word boundary.

So, \b is similar to [^a-zA-Z0-9_] i.e \b would check for anything except word

You can instead use this regex

(?<=\s|^)[a-zA-Z]+(?=\s|$)
-------- --------- ------
   |         |       |->match only if the pattern is followed by a space(\s) or end of string/line($)
   |         |->pattern
   |->match only if the pattern is preceded by space(\s) or start of string\line(^)

Solution 2:

\b means (?:(?<!\w)(?=\w)|(?<=\w)(?!\w)). Which would match positions between letters and @.

You can write:

(?<!\S)[A-Za-z]+(?!\S)

(?!\S) is equivalent to (?=\s|$).