我在Perl中有一个复杂的预编译正则表达式.对于大多数情况下,正则表达式是正确的,并且匹配它应该的一切,不应该没有.除了一点.
基本上我的正则表达式看起来像:
my $regexp = qr/\b(FOO|BAR|\*)\b/;
Run Code Online (Sandbox Code Playgroud)
不幸的是m/\b\*\b/不会匹配example, *.只会m/\*/因为误报而无法使用.有没有解决方法?
从评论-误报是:**,example*,exam*ple
正则表达式的用途是什么?-它应该提取关键字(一个是单个星号),同事已经输入了产品数据.目标是将此信息从自由文本字段移动到原子字段中.
ike*_*ami 12
这听起来像你想要*作为一个单词字符.
\b
Run Code Online (Sandbox Code Playgroud)
相当于
(?x: (?<!\w)(?=\w) | (?<=\w)(?!\w) )
Run Code Online (Sandbox Code Playgroud)
所以你要
(?x: (?<![\w*])(?=[\w*]) | (?<=[\w*])(?![\w*]) )
Run Code Online (Sandbox Code Playgroud)
应用,您将获得以下内容:
qr/
(?: (?<![\w*])(?=[\w*]) | (?<=[\w*])(?![\w*]) )
(FOO|BAR|\*)
(?: (?<![\w*])(?=[\w*]) | (?<=[\w*])(?![\w*]) )
/x
Run Code Online (Sandbox Code Playgroud)
但鉴于我们对中间表达的了解,可以简化为以下内容:
qr/(?<![\w*])(FOO|BAR|\*)(?![\w*])/
Run Code Online (Sandbox Code Playgroud)