jkushner jkushner - 7 months ago 46
Perl Question

Simple perl regex replacement

Here is my perl code:

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

I'm very new to perl so i am aware that its incorrect but how do i perform this
regex replacement

The end result would be a transformation of
<a href="/jobs">click here</a>

sln sln

So, with all the answers you know the substitute form is s///

However, with something this big you should break it up into parts
to make it easier to maintain. And also helps to get out of the
quagmire of delimiter hell.

This uses a pre-compiled regex and a callback function invoked with 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;


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