我一直在测试ideone中的sed命令的功能。我只想用它来对字符串执行正则表达式匹配,然后只保存该字符串中与该字符串变量匹配的部分。
这是我到目前为止所做的:
my $command_return = '123 test.txt';
$command_return =~ s/'\s.*'//g;
print $command_return;
在现实世界中,我将使用它来解析Linux系统命令的结果。为了测试,我只想解析你在上面看到的字符串。
答案 0 :(得分:2)
好的,一般的正则表达式和特定的perl的技巧是能够捕获正则表达式的各个部分。
所以在你的例子中:
my $command_output = "1243 test.txt";
my ( $command_code ) = ( $command_output =~ m/^(\d+)/ );
print $command_code,"\n";
这将捕获' "一个或多个数字"并将其插入$command_code
。
这对解析STDIN
很有效,因为你可以通过while循环读取它:
while ( <STDIN> ) {
my ( $command_code ) = m/^(\d+)/;
print $command_code,"\n";
}
使用正则表达式捕获时 - 使用括号 - 它将返回一个数组。我们作弊,并将该数组的第一个元素分配给$command_code
并丢弃其他任何内容。因为只有一场比赛,这很好。但如果你愿意,你可以捕获更多。
如果没有&#39;匹配目标&#39;如果已指定,则perl
会在匹配中使用隐式变量$_
- 该变量将分配给&#39;当前行&#39;在这个while
构造中。
答案 1 :(得分:0)
这个问题是理所当然的。我在我的Windows机器上创建了一个简单的perl脚本并通过Cygwin运行它。它很棒。
以下是我的完成内容:
y = float(x) # Will throw exception if x is not castable to a float
if y < 0 or y > 5:
raise ValueError("Bad x parameter!")