Namazu-users-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: pnamazu の Replace について
古川です。
From: "Hiroaki, Sakuma" <nlug@xxxxxxxxxxxxxxxxx>
Subject: [namazu-users-ja] pnamazu の Replace について
Date: Mon, 19 Nov 2001 17:17:11 +0900
nlug> Replace /C\|/foobaa/(.*)/([^\/]*)/ http://foo.baa/\1/\2/
nlug> のような表現です。これを、本家namazuだときちんと置き換えてくれますが、
nlug> pnamazuだと、
nlug> http://foobaa/\1/\2/
nlug> と\*が置き換えられずに出てきてしまいます。
nlug> 確認をお願いいたします。
こんな感じでどうでしょうか?
--
Rei FURUKAWA
furukawa@xxxxxxxxxxxx
--- ldnmzcnf.pl 2001/09/11 14:48:31 1.18
+++ ldnmzcnf.pl 2001/11/20 16:37:15
@@ -22,15 +22,9 @@
$URL_REPLACE_FROM = $1;
$URL_REPLACE_TO = $2;
}elsif (/^\s*Replace\s+\"((\\.|[^\\])+)\"\s+\"((\\.|[^\\])+)\"/i){ #"
- unshift(@ReplacePattern, $1);
- $ReplacePattern{$1} = $3;
- $URL_REPLACE_FROM = $1;
- $URL_REPLACE_TO = $3;
+ &entry_replace($1, $3);
}elsif (/^\s*Replace\s+(\S+)\s+(\S+)/i){
- unshift(@ReplacePattern, $1);
- $ReplacePattern{$1} = $2;
- $URL_REPLACE_FROM = $1;
- $URL_REPLACE_TO = $2;
+ &entry_replace($1, $2);
}
$URL_REPLACE_FROM = $1 if /^URL_REPLACE_FROM\s+(\S+)/i;
$URL_REPLACE_TO = $1 if /^URL_REPLACE_TO\s+(\S+)/i;
@@ -105,6 +99,18 @@
}
}
+sub entry_replace{
+ my ($src, $dst) = @_;
+ my $sub = eval "sub {\$_[0] =~ s\xff$src\xff$dst\xffi}";
+ unless ($@){
+ unshift(@ReplacePattern, $src);
+ $ReplacePattern{$src} = $dst;
+ $ReplaceSub{$src} = $sub;
+ $URL_REPLACE_FROM = $src;
+ $URL_REPLACE_TO = $dst;
+ }
+}
+
sub replace{
my $src = $_[0];
return unless $Replace;
@@ -113,7 +119,7 @@
}
my $pat;
for $pat (@ReplacePattern){
- &debug_log("replace: $src => $_[0]"), return if $_[0] =~ s/$pat/$ReplacePattern{$pat}/ig;
+ &debug_log("replace: $src => $_[0]"), return if &{$ReplaceSub{$pat}}($_[0]);
}
}