为什么这个或运算符不能在perl中工作
我试图在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
/(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:你已经接受了一个答案,基本上是说你的原始代码应该可以工作。如果你能解释一下为什么你的代码不起作用,这可能会对将来遇到类似问题的人有所帮助。