आप उपयोग कर सकते हैं perl
। Faq से सीधे - से उद्धृत perldoc perlfaq6
:
RHS पर मामला संरक्षित करते समय मैं LHS पर केस-असंवेदनशील कैसे प्रतिस्थापित करता हूं?
यहाँ लैरी रोसलर द्वारा एक सुंदर Perlish समाधान है। यह ASCII स्ट्रिंग्स पर बिटवाइज़ एक्सर के गुणों का शोषण करता है।
$_= "this is a TEsT case";
$old = 'test';
$new = 'success';
s{(\Q$old\E)}
{ uc $new | (uc $1 ^ $1) .
(uc(substr $1, -1) ^ substr $1, -1) x
(length($new) - length $1)
}egi;
print;
और यहाँ यह उप के रूप में है, ऊपर के बाद मॉडलिंग की गई है:
sub preserve_case($$) {
my ($old, $new) = @_;
my $mask = uc $old ^ $old;
uc $new | $mask .
substr($mask, -1) x (length($new) - length($old))
}
$string = "this is a TEsT case";
$string =~ s/(test)/preserve_case($1, "success")/egi;
print "$string\n";
यह प्रिंट:
this is a SUcCESS case
एक विकल्प के रूप में, प्रतिस्थापन शब्द के मामले को रखने के लिए यदि यह मूल से अधिक लंबा है, तो आप जेफ पिनयिन द्वारा इस कोड का उपयोग कर सकते हैं:
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);
}
यह "यह एक SUCCess केस है।"
बस यह दिखाने के लिए कि सी प्रोग्रामर किसी भी प्रोग्रामिंग भाषा में सी लिख सकते हैं, यदि आप अधिक सी-लाइक सॉल्यूशन पसंद करते हैं, तो निम्न स्क्रिप्ट प्रतिस्थापन को एक ही मामले, पत्र द्वारा पत्र, मूल के रूप में बनाती है। (यह भी Perlish समाधान से चलाता है के बारे में 240% धीमी गति से होता है।) यदि प्रतिस्थापन में स्ट्रिंग से प्रतिस्थापित किए जाने वाले वर्णों की तुलना में अधिक वर्ण होते हैं, तो अंतिम प्रतिस्थापन के मामले में अंतिम वर्ण का उपयोग किया जाता है।
# Original by Nathan Torkington, massaged by Jeffrey Friedl
#
sub preserve_case($$)
{
my ($old, $new) = @_;
my ($state) = 0; # 0 = no change; 1 = lc; 2 = uc
my ($i, $oldlen, $newlen, $c) = (0, length($old), length($new));
my ($len) = $oldlen < $newlen ? $oldlen : $newlen;
for ($i = 0; $i < $len; $i++) {
if ($c = substr($old, $i, 1), $c =~ /[\W\d_]/) {
$state = 0;
} elsif (lc $c eq $c) {
substr($new, $i, 1) = lc(substr($new, $i, 1));
$state = 1;
} else {
substr($new, $i, 1) = uc(substr($new, $i, 1));
$state = 2;
}
}
# finish up with any remaining new (for when new is longer than old)
if ($newlen > $oldlen) {
if ($state == 1) {
substr($new, $oldlen) = lc(substr($new, $oldlen));
} elsif ($state == 2) {
substr($new, $oldlen) = uc(substr($new, $oldlen));
}
}
return $new;
}
ABcDeF
?