Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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
Regex 通配符匹配_Regex_Perl - Fatal编程技术网

Regex 通配符匹配

Regex 通配符匹配,regex,perl,Regex,Perl,我需要匹配包含通配符\和的句子。在同一句话中。如何使用Perl 假设我的文件有以下句子: ttterfasghti。 ddseghies/affag hhail/afgsh。 asfsdgagh/ adterhjc/sgsagh。 我的预期输出应该是: hhail/afgsh。 adterhjc/sgsagh。 这感觉像是重复,但我就是找不到一个好的问题 对于/,有两种方法: 使用带有不同分隔符的m/运算符,例如m、、m{},或 转义它,即/\/ 对于使用转义 请注意,在字符类([…])中

我需要匹配包含通配符\和的句子。在同一句话中。如何使用Perl

假设我的文件有以下句子:

ttterfasghti。
ddseghies/affag
hhail/afgsh。
asfsdgagh/
adterhjc/sgsagh。
我的预期输出应该是:

hhail/afgsh。
adterhjc/sgsagh。

这感觉像是重复,但我就是找不到一个好的问题

对于
/
,有两种方法:

  • 使用带有不同分隔符的
    m/
    运算符,例如
    m、
    m{}
    ,或
  • 转义它,即
    /\/
对于
使用转义

请注意,在字符类(
[…]
)中,许多特殊字符不再需要转义

因此,我们得到:


$perl在评论中给出了澄清

除匹配行外的任何订单都应同时包含
/

简单的方法

perl -wne'print if m{/} and m{\.}' filename
这是低效的,因为它两次启动正则表达式引擎,并两次扫描每个字符串。然而,在大多数情况下,这是不可注意的,尽管此代码比任务的单个正则表达式清晰得多

我使用
{}
分隔符,这样就不必转义
/
,在这种情况下,前面的
m
是必须的。然后我在另一个模式上使用相同的
m{…}
来保持一致性


一个最受欢迎的查询是,这可以在脚本中完成,而不是一行!乐意效劳

use warnings;
use strict;

my $file = shift || die "Usage: $0 file\n";

open my $fh, '<', $file or die "Can't open $file: $!";

while (<$fh>) {
    print if m{/} and m{\.};
}

close $fh;
使用警告;
严格使用;
my$file=shift | | die“用法:$0 file\n”;

打开我的$fh,“@BookOfZeus,这个问题不适用,因为它讨论的是字符串变量,而不是正则表达式。最后我明白了,你问题中的格式不正确。你说的是多行。我会改进我的答案。这两个字符是以任意顺序出现的,还是只有一个/后跟一个句点?@Shawn任意顺序,但匹配的行应该同时包含/和。它正在工作,但我需要脚本或程序形式的代码,但不象命令行那样。@cherry已编辑,并将编辑更多。让我知道是否有任何特别的解释/评论会有帮助。太棒了!非常感谢。这个程序打开后,你能做些什么吗?“请用适合我的代码的格式缩进它并进行分析。@你显示的代码有两个问题:(1)它不会满足您的要求,因为它只会先匹配
/
,然后再匹配
。它不会匹配有
的行,然后是
/
(不再是
)。(2)不要将
作为文件句柄使用,它可能会实际工作,但只会等待出现问题。相反,请将其设置为“词法”变量,如
$fh
注意注释中的澄清:“除匹配行外,任何订单都应同时包含
/
”(我的重点)更新了我的答案,以反映OP中的最新注释。谢谢。