为什么这个OR运算符不在perl中工作

时间:2017-04-13 15:47:42

标签: perl

我正在尝试在perl中使用二进制OR运算符来从文件中获取一些信息。我使用了这个正则表达式

 /(fix|issue)\s*#/mi

但找不到任何匹配。 在文件中有4个匹配'fix#'和3匹配'issue#',并且在没有OR运算符的情况下单独使用它时我做对了。

   /fix\s*#/mi

   /issue\s*#/mi

所以OR假设返回7个匹配,但它什么都不返回。

这两行完全在文件

Add test for the example in issue #142.

 Fix #1190

我这样做是否正确?

感谢您的帮助

1 个答案:

答案 0 :(得分:3)

它对我有用。它每行匹配一次,因为/g没有给出。此外,由于/m^均未使用,因此$无效。 /i也使ISSUE #匹配。

#!/usr/bin/perl
use warnings;
use strict;
use feature qw{ say };

while (<DATA>) {
    say "Matched $1" if /(fix|issue)\s*#/mi;
}

__DATA__
fix #
fix # fix #
---
issue #
issue # issue #

请注意&#34;二进制或&#34;是在正则表达式之外使用的不同运算符:

say 4 | 8;  # 12
正则表达式中的

|被称为&#34;交替&#34;。