regex to match word boundary beginning with special characters

\b

is short for

(?:(?<!\w)(?=\w)|(?<=\w)(?!\w))

If you want to treat ~ as a word character, change \w to [\w~].

(?:(?<![\w~])(?=[\w~])|(?<=[\w~])(?![\w~]))

Example usage:

my $word_char = qr/[\w~]/;
my $boundary  = qr/(?<!$word_char)(?=$word_char)
                  |(?<=$word_char)(?!$word_char)/x;

$key =~ /$boundary$match$boundary/

If we know $match can only match something that starts and ends with a $word_char, we can simplify as follows:

my $word_char   = qr/[\w~]/;
my $start_bound = qr/(?<!$word_char)/;
my $end_bound   = qr/(?!$word_char)/;

$key =~ /$start_bound$match$end_bound/

This is simple enough that we can inline.

$key =~ /(?<![\w~])$match(?![\w~])/

Leave a Comment