负面前瞻RegEx

nza*_*ski 3 regex perl

为什么这不起作用?试图做一个负面的预测.我试图从垃圾箱中取出数字,除了隔离箱和检查箱.当我使用前面的^代码匹配括号中的所有数字.当我删除^它什么都不匹配.

你也可以使用"或运算符|" 在负面的向前看?我想要^(?!Quarantine_Bin | Inspection_Bin)

我也试图特别否定[^Quarantine_Bin]它仍然匹配.

^(?!Quarantine_Bin)\([0-9]+\)
Run Code Online (Sandbox Code Playgroud)

数据

    Quarantine(2),Other_Bin(2),Quarantine_Bin(2),Quarantine_Bin(2),
    Quarantine_Bin(5),Inspection_Bin(3),Regular_Bin(5),other(2)
Run Code Online (Sandbox Code Playgroud)

zdi*_*dim 5

这是一个负面的背后隐藏

use warnings;
use feature 'say';

my @strings = (
    "Quarantine_Bin(5),Inspection_Bin(3),Regular_Bin(5),other(2)",
    "Quarantine(2),Other_Bin(2),Quarantine_Bin(2),Quarantine_Bin(2),"
);

for (@strings) {
    my @m = $_ =~ /(?<!\b(?:Quarantine|Inspection)_Bin)\(\d+\)/g; 
    say "@m";
} 
Run Code Online (Sandbox Code Playgroud)

^锚你想要的这里没有做,使用\b指定一个字边界.

这包括带数字的括号,返回行(5) (2)(2) (2).

如果您宁愿省略它们,请在数字周围添加捕捉画面

/(?<! \b(?: Quarantine|Inspection)_Bin ) \( (\d+) \)/xg;
Run Code Online (Sandbox Code Playgroud)

或拉开后视镜内的开口按钮(因此不会消耗)并省略关闭的一个

/(?<! \b(?: Quarantine|Inspection)_Bin \( ) \d+/xg;
Run Code Online (Sandbox Code Playgroud)

这些返回线5 22 2没有括号.

/x修改允许里面的可读性空间.