質問: Regex.Replace(inputString, regex, ""); } ``` ■開発環境 VisualStudio2015 Unity5.6.3p1
回答: 使用しているフォントによっては、どちらも円記号に見えているのかもしれませんが、パターン文字列中最初の`\`はU+005cのバックスラッシュ(Windows用を中心に一部フォントでは円記号で表示される)ですが、後ろ3行の`¥`は普通に円記号U+00A5です。 C#では`\u{...}`という表記は通常の文字列内のエスケープシーケンスとしても、`Regex`パターンのエスケープシーケンスとしても無効なので、苦し紛れに本物円記号に置き換えてしまったのでしょうか? そもそも、あなたの例の場合4〜6行目の`"[\uD800-\uDB7F]", "[\uDB80-\uDBFF]", "[\uDC00-\uDFFF]"`で全てのサロゲートが除外されてしまうので、非BMP文字の一部範囲を表すようなパターンは意味がありません。 後ろ3行のパターンはとりあえず削除してしまうべきでしょう。(それであなたの所望する文字が全部削除されるかどうかは別問題ですが。) ``` private static readonly List RegexList = new List() { "[\u2600-\u26FF]", // Unicodeのその他の記号(Miscellaneous Symbols) "[\u0530-\u058F]", // Unicodeのアルメニア文字(Armenian) "[\u0A00-\u0A7F]", // Unicodeのグルムキー文字(Gurmukhi) "[\uD800-\uDBFF]", // 上位サロゲート(High Surrogates) "[\uDC00-\uDFFF]", // 下位サロゲート(Low Surrogates) "[\uE000-\uF8FF]", // 私用領域(Private Use Area) }; ``` ちなみに例えば`[¥u{EFF80}-¥u{EFFFF}]`という正規表現は、`¥`がメタキャラクタとは扱われないし`-`の両側の文字も正しく文字範囲と扱えないので、`[]`内に含まれる全文字にマッチするパターンとなるようで、`0`, `8` 以外に`E`や`F`なんかも削除されてしまうのではないかと思います。 サロゲートペアの上位下位全部を指定すると、上記に書いたように全ての非BMP文字が削除されてしまうので、「それでは削除対象が多すぎる!」と言う場合にはもっと具体的に削除対象の文字列を示していただかないと、さてどうするべきかは書けないですね。