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