gpt4 book ai didi

正则表达式匹配以特殊字符开头的单词边界

转载 作者:行者123 更新时间:2023-12-04 13:23:58 25 4
gpt4 key购买 nike

我有正则表达式可以很好地匹配单词,除非它们包含特殊字符,例如
~Query 是 C++ 类成员的名称。
对于单个字符的成员名称,需要使用如下所示的词边界。$key =~ /\b$match\b/
我尝试了许多我认为可行的表达方式,例如 /[~]*\b$match\b//\b[~]*$match\b/
是否可以在可能包含特殊字符的单词上放置单词边界?

最佳答案

\b

是简称
(?:(?<!\w)(?=\w)|(?<=\w)(?!\w))

如果您想治疗 ~作为单词字符,更改 \w[\w~] .
(?:(?<![\w~])(?=[\w~])|(?<=[\w~])(?![\w~]))

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

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

如果我们知道 $match只能匹配以 $word_char 开头和结尾的内容,我们可以简化如下:
my $word_char   = qr/[\w~]/;
my $start_bound = qr/(?<!$word_char)/;
my $end_bound = qr/(?!$word_char)/;

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

这很简单,我们可以内联。
$key =~ /(?<![\w~])$match(?![\w~])/

关于正则表达式匹配以特殊字符开头的单词边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12712754/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com