2010/09/05

PowerShellの-eq演算子を使って文字列の比較をしていたとき、長音記号(ー)と踊り字(ヽ,ヾ,ゝ,ゞ,々)を含む場合に特異な挙動を示したので、参考までに書いておきます。

長音記号と踊り字単独、もしくはこれらの文字から始まる文字列(”ーあああ”など)に関しては、その長音記号と踊り字はすべて同じ文字であるとみなされます。

たとえば

PS> "々" -eq "ー"
True
PS> "ゞあああ" -eq "ヽあああ"
True

-ceq(大文字小文字を区別する-eq)でも同様です。

なお、これらの文字の前に長音記号と踊り字以外の文字がある場合は、別の文字列とみなされます。

PS> "態々" -eq "態ー"
False

これらの文字を含む文字列を比較する場合は十分気を付けてください。たとえば"々"と"ー"は常に別の文字と解釈させたい場合は、

PS> [string]::op_Equality("々","ー")
False

のようにop_Equalityメソッドを使うとよいでしょう。このようにすると.NETのSystem.Stringクラス標準の比較演算を行います。

元記事:http://blogs.wankuma.com/mutaguchi/archive/2010/09/05/192771.aspx

古い記事へ | 新しい記事へ


プライバシーポリシー

Twitter

Books