আপনি ব্যবহার করতে পারে perl
। সোজা প্রশ্ন থেকে - উদ্ধৃতperldoc perlfaq6
:
আরএইচএসে কেস সংরক্ষণের সময় আমি কীভাবে এলএইচএসের উপর সংবেদনশীলভাবে কেস প্রতিস্থাপন করব?
ল্যারি রোসলারের একটি সুন্দর পার্লিশ সমাধান এখানে। এটি 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);
}
এটি বাক্যটিকে "এটি একটি সুইস কেস" হিসাবে পরিবর্তন করে।
কেবল সি প্রোগ্রামাররা যে কোনও প্রোগ্রামিং ভাষায় সি লিখতে পারে তা দেখানোর জন্য, আপনি যদি আরও সি-জাতীয় সমাধান পছন্দ করেন তবে নিম্নলিখিত স্ক্রিপ্টটি মূল হিসাবে চিঠির মাধ্যমে চিঠিপত্রের মতো একই ক্ষেত্রে তৈরি করে। (পার্লিশ সমাধানের চেয়ে প্রায় 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
?