5.1. Find a Specific Word
Problem
You’re given the simple task of finding all occurrences of
the word cat
, case insensitively. The
catch is that it must appear as a complete word. You don’t want to find
pieces of longer words, such as hellcat
, application
, or Catwoman
.
Solution
Word boundary tokens make this a very easy problem to solve:
\bcat\b
Regex options: Case insensitive |
Regex flavors: .NET, Java, JavaScript, PCRE, Perl, Python, Ruby |
Discussion
The word boundaries at both ends of the regular expression
ensure that cat
is matched only when it appears as a
complete word. More precisely, the word boundaries require that
cat
is set
apart from other text by the beginning or end of the string, whitespace,
punctuation, or other nonword characters.
Regular expression engines consider letters, numbers, and underscores to all be word characters. Recipe 2.6 is where we first talked about word boundaries, and covers them in greater detail.
A problem can occur when working with international text
in JavaScript, PCRE, and Ruby, since those regular expression flavors
only consider letters in the ASCII table to
create a word boundary. In other words, word boundaries are
found only at the positions
between a match of ‹[^A-Za-z0-9_]|^
› and ‹[A-Za-z0-9_]
›, or between ‹[A-Za-z0-9_]
› and ‹[^A-Za-z0-9_]|$
›. The same is true
in Python when the UNICODE
or U
flag is not set. This
prevents ‹\b
› from being useful for a “whole word only” search within text that contains accented letters or words that use non-Latin ...
Get Regular Expressions Cookbook, 2nd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.