如何在Perl中使用正则表达式中的分词,星号,分词?

bur*_*rsk 8 regex perl

我在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)