Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Let perl replase words

1 view
Skip to first unread message

Eelco Alosery

unread,
Oct 7, 2006, 2:59:21 PM10/7/06
to macperl...@perl.org
Hello,

I have a small, (maby big) problem.

Im writing a search script for my site, and wand to do some replacing
of words.

I have a string that contains for example this :
Test this is a smal test script line.

Now i have a search patern :
test

What i want to do is this.
Test and test must be replased by <b>Test</b> and <b>test</b>

Thus al (case insensative) matches to test must be converted to bold
words.

I have tested a lot, and the best result sovar is this code :
$head =~ s/$replace/<u>$replace<\/u>/gi;

But this code replases Test to <b>test</b> it is realy convertet to
the original search patern.

Any help whit this is very welcome.

Thanks,
Eelco Alosery

Chris Sarnowski

unread,
Oct 7, 2006, 5:29:35 PM10/7/06
to macperl...@perl.org


$head =~ s/($replace)/<u>$1<\/u>/gi;

This will match the value of $replace regardless of case. But $1 will
preserve the case of the matched string, so will do what you want.

Just for fun, here is a program with a function that will replace any
string with a different string and will match the case of each
character of the original string in the corresponding position of the
replacement string.

---- begin testcase.pl ----
#!/usr/bin/perl -w

use strict;
sub preserve_case($$) {
my ($from, $to) = @_;
my ($lf, $lt) = map length, @_;
if ($lt < $lf) {
$from = substr $from, 0, $lt;
} else {
$from .= substr $to, $lf;
}
return uc $to | ($from ^ uc $from);
}

### begin main

my $string = shift;
my $orig = shift;
my $replace = shift;
$string =~ s/($orig)/preserve_case($1, $replace)/egi;
print $string, "\n";

---- end testcase.pl ----

% testcase.pl "here is a foo string with a proper Foo and a FoO" foo bar
here is a bar string with a proper Bar and a BaR

Jeff Lowrey

unread,
Oct 7, 2006, 4:04:00 PM10/7/06
to Eelco Alosery, macperl...@perl.org
0 new messages