一応、現在の実装の状態と案を書いておきます。
現在の実装は以下です。
以下の条件で囲み文字として扱い、取り除く操作を行う。
・文字列の先頭と最後に同じ文字がある場合。
・全角で、先頭と最後が「」『』【】{}()〔〕“”‘’<>の場合。
・半角で、先頭と最後が()[]{}`'<>の場合
今問題になっているのは、最初の同じ文字の条件のケースですが、他の文字についても、必ずしもの糂汰動きと一致するとは限りません。
(<>とか微妙な気が)
そこで、以下の2つのシステム変数を設けてこれにより制御する方法はどうでしょうか。
・囲みトリム文字単独というシステム変数を設ける。
この変数にある文字が、文字列の最初と最後にある場合、囲み文字として取り除く。
全角半角大文字小文字はすべて区別する。
この変数が空欄の場合、1つの文字が開始と終了に現れたことによる囲み文字の処理は行わない。
この変数に「全て」と指定した場合、開始と終了が一致していればどんな文字でも囲み文字として取り除く。
※「全」と「て」を囲み文字としたい場合、「て全」と指定することは可能。
「なし」「無し」も特殊扱いしたほうがわかりやすいかも。
・囲みトリム文字ペアというシステム変数を設ける。
この変数にある文字のペアが、文字列の最初と最後のある場合、囲み文字として取り除く。
全角半角大文字小文字はすべて区別する。
この変数が空欄の場合、ペア文字による囲み文字の処理は行わない。
無難なデフォルト値として、
囲みトリム文字単独=『"'`”’‘』
囲みトリム文字ペア=`「」『』【】{}()〔〕“”‘’<>` & 『()[]{}`'<>』
あたりを提案します。
(もしかすると、<><>は無い方が良いかも。)
変数のデフォルト値の扱いとしては、今後の更新で(より良くするために)変更する可能性がある旨を記載して、その影響を避けたい場合には、必ず明示的に代入して使うことを推奨しておくとよいかと思います。
(上記の<>とか後から削除するかもしれません。)