2016-08-15 9 views
-2

Hier ist mein Perl-Code:Einfache perl regex Ersatz

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

Ich bin sehr neu so Perl ich weiß, dass seine falsche, aber wie kann ich diese regex replacement korrekt auszuführen. mit "s /"

2 Sie Ihre Substitution beginnen vergessen zu:

Das Endergebnis eine Transformation von $var zu <a href="/jobs">click here</a>

+4

Ich verstehe nicht, wie Sie den Ersatz Form verpasst. Es gibt nur 1 und Sie haben% 99 davon und scheinen Regex zu kennen. Woher haben Sie die vorhandenen Informationen? 'verwenden Sie streng; Verwenden Sie Warnhinweise, sollte Ihnen etwas gesagt haben. – sln

+0

Eine Erinnerung, siehe [Was soll ich tun, wenn jemand meine Frage beantwortet?] (Http://stackoverflow.com/help/someone-answers) – zdim

+0

@ zdim danke für die Erinnerung. Ihre Antwort war großartig, aber die eine war meiner Meinung nach besser. Wenn Sie nicht einverstanden sind, teilen Sie mir bitte mit, warum und ob ich nicht in Betracht ziehe, zu Ihnen zu wechseln. – jkushner

Antwort

2

Also, mit allen Antworten kennen Sie die Ersatz Form s///

jedoch ist, mit etwas so groß, dass man sollte es brechen in Teile
, um es einfacher zu halten. Und hilft auch, heraus des
Quagmire Delimiter Hölle zu erhalten.

Dieser verwendet eine vorkompilierte regex und eine Callback-Funktion mit s aufgerufen /// 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 wäre Der Schrägstrich in "</a>" musste entkommen sein.

3: Auf der rechten Seite der Substitution, verwenden Sie $ 1, $ 2 usw., nicht \ 1, \ 2 usw.

Um die Dinge besser lesbar zu machen, können Sie den "s" Operator folgen mit irgendeinem Zeichen, nicht nur ein Schrägstrich. Dies bedeutet, dass Sie keine Schrägstriche entkommen müssen.

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