2009-06-19 131 views

回答

1

你想返回的東西匹配一個或多個字符是什麼,但:隨後是:與第二個你想要做同樣的事情,但以$取代它更換。

11

perldoc perlreref

[^:] 

是一個字符類,它比其他':'任何字符匹配。

[^:]+ 

表示匹配一個或多個這樣的字符。

我不確定需要捕獲圓括號。在任何情況下,

([^:]+): 

捕獲一個或多個非冒號字符後跟一個冒號的序列。

+7

我以爲第一個是雞。第二種是頭髮不好的雞,第三種是皺着眉頭的人拿着一頭壞頭髮的雞。皺眉的人往往會弄亂數據集,特別是當他們有雞時 - 所以能夠找到它們並用不太破壞性的東西代替它們是一件好事! – daotoad 2009-06-19 21:11:38

+1

我想說最後一個更像是一個吃壞頭髮的雞。 (insertfoodhere): – user105033 2009-06-22 20:37:14

3

第一個從一行中捕獲冒號前面的部分,比如字符串「abc:foo」中的「abc」。更準確地說,它至少與冒號前面的一個非冒號字符(雖然儘可能多)匹配並將它們放入捕獲組中。

第二個替代部分,雖然這個時候包括冒號由變量$replace的內容。

0
$line =~ /([^:]+):/; 

匹配任何不包含:之前:/

如果$行= 「http://www.google.com」,它將匹配HTTP(變量$ 1將包含HTTP)

$line =~ s/([^:]+):/$replace/; 

這一次,替換變量內容匹配的值$替換

3

我可能誤解了以前的一些答案,但我認爲關於秒的疑惑ond的例子。它將而不是通過$替換僅替換捕獲的項目(即,直到冒號的一個或多個非冒號)。它將用$replace替換所有([^:]+): - 冒號。 (取代上比賽,而不僅僅是捕捉動作。)

這意味着,如果你不包括$replace冒號(你想要的),你會得到位:

my $line = 'http://www.example.com/'; 
my $replace = 'ftp'; 
$line =~ s/([^:]+):/$replace/; 
print "Here's \$line now: $line\n"; 

輸出:

Here's $line now: ftp//www.example.com/ # Damn, no colon! 

我不知道,如果你只是看示例代碼,但你,除非你打算使用捕捉我不知道你真的想在這些例子。

如果您對正則表達式(或Perl)非常不熟悉,則應在嘗試perldoc perlreperldoc perlretut之前查看perldoc perlrequick

4
$line =~ /([^:]+):/; 

=〜操作符被稱爲binding operator,它運行對一個標量值regexsubstitution或(在這種情況下$線)。至於正則表達式本身,()指定一個捕獲。捕獲將與他們匹配的文本放在特殊的全局變量中。這些變量被編號從1開始,並對應於括號中顯示的順序,所以給定的

"abc" =~ /(.)(.)(.)/; 

$1變量將包含"a",所述$2變量將包含"b",並且$3變量將包含"c"(如果你還沒有猜到.匹配一個字符*)。 []指定一個字符類。字符類將匹配其中的一個字符,因此/[abc]/將匹配一個字符,如果它是"a""b""c"。字符類可以通過以^開頭來取消。否定字符類匹配一個未列在其中的字符,因此[^abc]將匹配不是"a""b""c"(例如,"d"將匹配)的一個字符。 +被稱爲量詞。量詞告訴你前面的模式必須匹配多少次。 +要求模式匹配一​​次或多次。 (*量詞要求模式匹配零次或多次)。 :對正則表達式引擎沒有特別的意義,所以它只是一個字面意思:

因此,將這些信息放在一起,我們可以看到正則表達式將匹配一個或多個非冒號字符(將此部分保存爲$1),後跟一個冒號。

$line =~ s/([^:]+):/$replace/; 

這是一個替代。替換有兩個部分,正則表達式和替換字符串。正則表達式部分遵循與正常正則表達式相同的所有規則。替換部分被視爲雙引號字符串。替換替換掉regex匹配以更換,所以給出下面的代碼

my $line = "key: value"; 
my $replace = "option"; 

$line =~ s/([^:]+):/$replace/; 

的$行變量將持有該字符串"option value"

您可能會感興趣perldoc perlretut

*除了換行符,除非/ m選項被使用,在這種情況下,任何字符

1

perl的-MYAPE ::正則表達式::解釋-e「打印YAPE ::正則表達式:: Explain->新匹配('([^:] +):') - > explain「

The regular expression: 

(?-imsx:([^:]+):) 

matches as follows: 

NODE      EXPLANATION 
---------------------------------------------------------------------- 
(?-imsx:     group, but do not capture (case-sensitive) 
         (with^and $ matching normally) (with . not 
         matching \n) (matching whitespace and # 
         normally): 
---------------------------------------------------------------------- 
    (      group and capture to \1: 
---------------------------------------------------------------------- 
    [^:]+     any character except: ':' (1 or more 
          times (matching the most amount 
          possible)) 
---------------------------------------------------------------------- 
)      end of \1 
---------------------------------------------------------------------- 
    :      ':' 
---------------------------------------------------------------------- 
)      end of grouping 
---------------------------------------------------------------------- 
相關問題