2013-06-28 73 views
-2

在Perl中,什么是下面的表达式做:什么用逗号分隔的Perl的正则表达式的意思是

$datarow =~ s/,null/,/g; 
+6

['perldoc perlre'](http://perldoc.perl.org/perlre.html)和['perldoc perlop'](http://perldoc.perl.org/perlop.html) – pilcrow

+7

逗号为不重要;它只是一个逗号字符。 –

+2

不要太难在OP。这不是一个函数通常编写的标准方式,当你不习惯时,它会令人困惑。在PHP中,它就像'$ datarow = ereg_replace(“,null”,“,”,$ datarow);'''''''''''也就是说,有一个明确的函数('ereg_replace'),一组清晰的参数,null,'','',''和'$ datarow),以及获取值的变量(同样是'$ datarow')。如果你不是Unix的人,Perl的sed/awk构造可能很难理解。 –

回答

6

s/pattern/replacement/是告诉Perl与replacement取代的pattern第一次出现的命令。

s/pattern/replacement/g导致该命令替换所有的事件,而不仅仅是第一个。

您的代码所做的是找到所有出现的,null,并用,(它在每个逗号后删除null)替换它们。

0

在Perl中s/=~意味着你正在做一个替代(如=~这是一个匹配评估后,相对于m/),该,null是来自中间/后你想与,替换字符串,和/g意味着它是一个全球性的更换,否则它会只需更换第一ocurrence ...

1

这是一个简单的替换命令:

$string =~ s/find/replace/; 

在上面,TH e变量$string正在改变。字符串find的第一个实例将替换为replace

添加在年底g意味着全球,而且将取代find所有实例replace

在您的命令中,正在更改变量$datarow,null的所有实例正在用逗号替换。请尝试以下脚本:

#! /usr/bin/env perl 

use strict; 
use warnings; 
use feature qw(say); 

my $datarow = "this,that,null,this,that,null,this,this,that"; 
$datarow =~ s/,null/,/g; 
say "Datarow is equal to `$datarow'"; 

继续尝试此程序。它应该输出:

Datarow is equal to `this,that,,this,that,,this,this,that' 

我在这里简单。 find不只是一串字母和数字,而是一个regular expression。正则表达式是一个强大的概念,但大多数开发人员并不完全理解的神秘概念。然而,这里没有使用正则表达式的魔术咒语,所以这只是描述了文字,null字符串。

不过,您应该花些时间看一下Perl中包含的Regular Expression教程。

相关问题