Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这个或运算符不能在perl中工作_Perl - Fatal编程技术网

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

为什么这个或运算符不能在perl中工作,perl,Perl,我试图在perl中使用二进制或运算符从文件中获取一些信息。我用了这个正则表达式 /(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. F

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

 /(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
我这样做对吗


谢谢你的帮助

它对我有用。它每行匹配一次,因为没有给出
/g
。而且,
/m
是无用的,因为既不使用
^
也不使用
$
<代码>/i使
问题#
也匹配

#!/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 #

正则表达式中的
|
称为“交替”。

它对我有效。它每行匹配一次,因为没有给出
/g
。而且,
/m
是无用的,因为既不使用
^
也不使用
$
<代码>/i使
问题#
也匹配

#!/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 #

正则表达式中的
|
称为“alternation”。

它不是二进制的,或者在正则表达式中是OR。如果看不到您的真实输入,我们不知道您的模式是否有效。如果没有
/g
,您将永远无法获得多个匹配项,除非有零个匹配项。输入是一个包含1000多行的大文件。文件中有“问题”和“修复”。文件的大小对我们来说并不重要。你可以包括一行你认为应该匹配的,一行不应该匹配的。更好的是,你的问题,包括你写的完整程序。正如下面choroba所指出的,这应该是可行的。所以这个bug可能在我们看不到的代码中。我从文件中复制粘贴了两行。谢谢你。这没什么区别,但它有助于提供上下文。现在请展示你的代码,它不是二进制的,也不是正则表达式中的。如果看不到您的真实输入,我们不知道您的模式是否有效。如果没有
/g
,您将永远无法获得多个匹配项,除非有零个匹配项。输入是一个包含1000多行的大文件。文件中有“问题”和“修复”。文件的大小对我们来说并不重要。你可以包括一行你认为应该匹配的,一行不应该匹配的。更好的是,你的问题,包括你写的完整程序。正如下面choroba所指出的,这应该是可行的。所以这个bug可能在我们看不到的代码中。我从文件中复制粘贴了两行。谢谢你。这没什么区别,但它有助于提供上下文。现在请显示您的代码。对不起,我混合了它们,我是指正则表达式中的OR。谢谢你的帮助。@Hukh:你已经接受了一个答案,基本上是说你的原始代码应该可以工作。如果你能解释一下为什么你的代码不起作用,这可能会对以后遇到类似问题的人有所帮助。对不起,我把它们混在一起了,我是指正则表达式中的OR。谢谢你的帮助。@Hukh:你已经接受了一个答案,基本上是说你的原始代码应该可以工作。如果你能解释一下为什么你的代码不起作用,这可能会对将来遇到类似问题的人有所帮助。