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~])/
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…