2013-06-28 72 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教程。

相關問題