2016-08-15 33 views
-2

這裏是我的Perl代碼:簡單的Perl的正則表達式替換

my $var="[url=/jobs/]click here[/url]"; 
$var =~ /\[url=(.+?)\](.+?)\[\/url\]/<a href="\1" style="text-decoration:none;color:#336699">\2</a>/g 

我很新的perl的,所以我知道它的不正確,但我如何正確地執行此regex replacement

最終的結果將是$var<a href="/jobs">click here</a>轉型

+4

我不明白你怎麼錯過了替代形式。只有1,你有99%的它似乎知道正則表達式。你從哪裏得到現有的信息? '嚴格使用;使用警告「應該告訴你一些事情。 – sln

+0

提醒,請參閱[我應該怎麼做,當有人回答我的問題?] – zdim

+0

@zdim謝謝你的提醒。你的回答很好,但後面的回答在我看來更好。如果你不同意,請告訴我爲什麼和不適當考慮改變你。 – jkushner

回答

2

因此,所有的答案,你知道的替代形式是s///

然而,這事大,你應該把它分解成幾部分
,使其更易於維護。並且還有助於獲得
泥潭的定界符地獄

它使用預編譯的正則表達式,並以s /// e

use strict; 
use warnings; 

# Pre-compiled regex 
my $rx = qr{\[url=(.+?)\](.+?)\[/url\]}; 

# Callback 
sub MakeAnchor { 
    my ($href,$text) = @_; 
    return '<a href="' . $href . '" style="text-decoration:none;color:#336699">' . $text . '</a>'; 
} 

my $input = '[url=/jobs/]click here[/url]'; 
$input =~ s/$rx/MakeAnchor($1,$2)/eg; 

print $input; 

調用的回調函數Outout

<a href="/jobs/" style="text-decoration:none;color:#336699">click here</a>

-1
my $var="[url=/jobs/]click here[/url]"; 
$var =~ s/\[url=(.+?)\](.+?)\[\/url\]/<a href="$1" style="text-decoration:none;color:#336699">$2<\/a>/g; 

1:你忘了用 「S /」

2啓動替代:在斜線 「</A>」需要逃脫。

3:在替代的右側,你可以使用$ 1,$ 2,等等,不\ 1 \ 2等

爲了讓事情更易讀,可以遵循 「S」 運營商與任何角色,而不僅僅是一個斜線。這樣做意味着您不必逃避斜線。

my $var="[url=/jobs/]click here[/url]"; 
$var =~ s!\[url=(.+?)\](.+?)\[\/url\]!<a href="$1" style="text-decoration:none;color:#336699">$2</a>!g;