我想从一个文件中得到-cfg的值。需要正则表达式的帮助。
文件包含:
### Full Command: /some/path/ -cfg abc123/123def ###
预期产出:abc123/123def
代码:
use strict;
use warnings;
my $file="file.txt"
open(F, '<', $file) or die "cannot open $file";
while (<F>) {
chomp;
if (/-cfg\s([a-zA-Z0-9_.]*)\s/) {
$value=$1;
print "Config: $value";
}
}
close F;
1条答案
按热度按时间nhaq1z211#
正则表达式模式缺少
/
,该字符串位于要匹配的字符串(abc123/123def
)中。由于模式分隔符为/
,因此在模式内必须转义/
或者,您可以将分隔符更改为几乎任何内容,然后我们确实需要前面的
m
如果您只需要ASCII码,可以使用
\w
作为“单词字符”([a-zA-Z0-9_]
)†,这样可以简化它还可以让您更容易地看到我们匹配的内容(单词字符和
.
以及/
)。我想补充的是,
/x
修饰符通常是一个真实的的祝福,使它忽略空格(和换行符和#
-注解),以便模式可以展开以提高可读性参考:教程perlretut和完整的参考perlre。perlrebackslash通常很方便。
对问题中程序的评论
$value
是未声明的,对于什么strict pragma将停止它在编译.需要open my $fh, '<', $file ...
。参见perlopentut和参考open。(另外,从v5.36.0开始,“bareword文件句柄”在默认情况下不起作用。)$!
error变量。†任何字母数字字符(和
_
),100_000+ Unicode字符