私は文字列を持っています
$string= 'AbCdEf';
そして、tr関数を使用して、すべての大文字を小文字に変換し、すべての小文字を大文字に変換したいと思います。基本的には逆にしてなりたいです。
aBcDeF
私はこの行を思いついたが、私が望むことをするためにそれを変更する方法がわからない。何か助けてください?
$string=~ tr/A-Z/a-z/;
ありがとう!
私は文字列を持っています
$string= 'AbCdEf';
そして、tr関数を使用して、すべての大文字を小文字に変換し、すべての小文字を大文字に変換したいと思います。基本的には逆にしてなりたいです。
aBcDeF
私はこの行を思いついたが、私が望むことをするためにそれを変更する方法がわからない。何か助けてください?
$string=~ tr/A-Z/a-z/;
ありがとう!
トムの要求に応じて、Unicode-clean(またはlocales-clean)バージョン:
s/([[:upper:]])|([[:lower:]])/defined $1 ? lc $1 : uc $2/eg
$string =~ tr/A-Za-z/a-zA-Z/;
次のいずれかの方法で完全なUnicodeソリューションを実行できます。
s /(\ p {CWU})| (\ p {CWL})/ defined $ 1?uc $ 1:lc $ 2 / gex;
またはこのように
s /(\ p {CWL})| (\ p {CWU})/ defined $ 1?lc $ 1:uc $ 2 / gex;
大文字がDZで小文字がdzであるDzのように、両方向で大文字と小文字を変更するもので何をしたいかによって異なります。
この入力全体でこれら2つの置換の2番目を実行する場合:
@0040コマーシャルAT ©00A9著作権記号 Å212BANGSTROMSIGN ⒜249CPARENTHESIZEDLATINSMALL LETTER A Ⓐ24B6CIRCLEDLATINCAPITAL LETTER A ⓐ24D0CIRCLEDLATINSMALL LETTER A A FF21 FULLWIDTH LATIN CAPITAL LETTER A FF41全幅ラテン語の小さな文字A Ⓒ24B8CIRCLEDLATINCAPITAL LETTER C ⓒ24D2CIRCLEDLATINSMALL LETTER C DZ01F1ラテン大文字DZ Dz01F2ラテン大文字Dと小文字Z dz01F3LATINSMALLLETTER DZ ⅲ2172小さなローマ数字の3つ S0053ラテン大文字S s0073ラテン文字S ſ017F LATIN SMALL LETTER LONG S ⒮24AEPARENTHESIZEDLATINSMALL LETTER S Ⓢ24C8CIRCLEDLATINCAPITAL LETTER S ⓢ24E2CIRCLEDLATINSMALL LETTER S ꞄA784ラテン大文字インシュラーS ꞅA785LATINSMALLLETTER INSULAR S ß00DFラテンスモールレターシャープS ẞ1E9Eラテン大文字シャープS Ⅶ2166ローマ数字セブン ⅻ217Bスモールローマ数字12
次の結果が得られます。
@0040コマーシャル ©00a9著作権記号 å212bオングストローム記号 ⒜249c括弧で囲まれたラテン小文字a ⓐ24b6丸で囲まれたラテン大文字a Ⓐ24d0丸で囲まれたラテン小文字a aff21全幅ラテン大文字a AAff41全幅ラテン小文字a ⓒ24b8丸で囲まれたラテン大文字c Ⓒ24d2丸で囲まれたラテン小文字c dz01f1ラテン大文字dz dz01f2ラテン大文字dと小文字z DZ01f3ラテン小文字dz Ⅲ2172小さなローマ数字3 s0053ラテン大文字s S0073ラテン小文字s S017fラテン小文字ロングs ⒮24ae括弧で囲まれたラテン小文字s ⓢ24c8丸で囲まれたラテン大文字s Ⓢ24e2丸で囲まれたラテン小文字s ꞅa784ラテン大文字insulars Ꞅa785ラテン文字インシュラー体のS SS00dfラテン小文字シャープs ß1e9eラテン大文字シャープs ⅶ2166ローマ数字7 Ⅻ217b小さなローマ数字12
最初の関数を使用して(そのセットで)異なる唯一の部分は、dzシーケンスが代わりに次のようになることです。
dz01f1ラテン大文字dz DZ01f2ラテン大文字dと小文字z DZ01f3ラテン小文字dz
上位または下位のテストだけを使用したくない理由は、大文字と小文字を区別しても大文字と小文字が変わらない大文字と小文字が区別されるコードポイントがたくさんあるため、不要な作業を行うためです。たとえば、これらはすべて大文字と小文字を区別するコードポイントですが、大文字でも小文字でも変更されません。
ª00AA女性の序数標識 ᴬ1D2CMODIFIERLETTER CAPITAL A ᴀ1D00ラテン文字スモールキャピタルA ℂ2102DOUBLE-STRUCKCAPITALC ᴰ1D30MODIFIERLETTERCAPITAL D ʣ02A3LATINSMALL LETTER DZ DIGRAPH ʤ02A4LATINSMALL LETTER DEZH DIGRAPH ℇ2107オイラー定数 ɘ0258LATINSMALLLETTER REVERSED E ɞ025ELATINSMALLLETTER CLOSED REVERSED OPEN E ℊ210AスクリプトスモールG ɡ0261LATINSMALLLETTER SCRIPT G ɢ0262ラテン文字スモールキャピタルG ʰ02B0MODIFIERLETTER SMALL H ℋ210BスクリプトキャピタルH ℎ210Eプランク定数 ℹ2139情報源 ʲ02B2MODIFIERLETTER SMALL J ℳ2133スクリプトキャピタルM º00BA男性的な序数標識 ɸ0278LATINSMALLLETTER PHI ĸ0138LATINSMALLLETTER KRA ʏ028Fラテン文字小大文字Y ℼ213CDOUBLE-STRUCKSMALL PI
したがって、それらが大文字または小文字であることを検出し、逆マッピング関数を呼び出して、何も変更されていないことを検出します。私は理解します、なぜわざわざ?