为什么这不管用?试图做一个消极的展望。除了检疫箱和检验箱外,我正试着从垃圾箱里取出号码。当我在前面加上^的代码时,是匹配括号中的所有数字的。当我移除^ it时,不匹配任何内容。
你还能在负前瞻中使用“或操作符”吗?我想要^(?!Quarantine_Bin|Inspection_Bin)
我还试图专门否定[^Quarantine_Bin],但它仍然是匹配的。
^(?!Quarantine_Bin)\([0-9]+\)数据
Quarantine(2),Other_Bin(2),Quarantine_Bin(2),Quarantine_Bin(2),
Quarantine_Bin(5),Inspection_Bin(3),Regular_Bin(5),other(2)发布于 2016-11-08 17:47:23
您应该使用负面的查找,如下所示:
(?<!\b(Quarantine|Inspection)_Bin)\([0-9]+\)(?<!\b(Quarantine|Inspection)_Bin)是一个负面的外观,如果在我们的匹配之前存在Quarantine_Bin或Inspection_Bin,则会断言失败。\b代表单词边界。
发布于 2016-11-08 17:51:15
这是个负面的背景
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";
} ^锚点不满足您的需要,请使用\b指定单词边界。
这包括带数字的括号、返回行(5) (2)和(2) (2)。
如果您希望省略它们,则在数字周围添加捕获参数
/(?<! \b(?: Quarantine|Inspection)_Bin ) \( (\d+) \)/xg;或者将打开的paren拉到后面(这样它就不会被消耗),而忽略了关闭的那个。
/(?<! \b(?: Quarantine|Inspection)_Bin \( ) \d+/xg;这些返回线5 2和2 2,没有父母。
/x修饰符允许空间内的可读性。
发布于 2016-11-08 19:17:49
^(?!Quarantine_Bin)\([0-9]+\)检查字符串的开头是否跟着Quarantine_Bin,而后面是否跟着\([0-9]\)。那不可能是真的。
[^Quarantine_Bin]匹配的单个字符不是B、Q、a、e、i、n、r、t、u或_。不是你想要的。
如果没有过滤,你就会
\b\w+\([0-9]+\)您希望确保\b后面没有Quarantine_Bin或Inspection_Bin,因此可以使用
\b(?!Quarantine_Bin\b)(?!Inspection_Bin\b)\w+\([0-9]+\)或
\b(?!(?:Quarantine|Inspection)_Bin\b)\w+\([0-9]+\)展望中的\b防止Quarantine_Bin_X被过滤掉。
有用的:
(?:(?!STRING).)*是STRING,[^CHAR]*是CHAR。
https://stackoverflow.com/questions/40493294
复制相似问题