質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

3回答

8561閲覧

C#でSJIS第一水準漢字、第二水準漢字の正規表現について

sunchan1107

総合スコア55

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

1クリップ

投稿2018/11/17 09:12

C#でSJISの第1水準漢字(16区~47区)、第2水準漢字(48区~84区)のみ入力を許可するロジックを作成する予定です。
正規表現で実現できるか色々と調べていますが解決に至っておりません。

ちなみに[亜-唖]を[0x889F-0x88A0]のような形で表現できれば解決できるかなと考えております。

試に ”亜唖稲萎”を[亜-唖]で正規表現してみると亜唖介が抽出されました。
原因はSJISのコード範囲ではなくUTF-16の範囲で検索されていることがわかりました。

漢字 SJIS UTF-16
亜  889F 4E9C
唖  88A0 5516
稲  88EE 7A32
萎  88DE 840E
介  89EE 4ECB

良い方法、ご教示お願いできますでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

どうしても正規表現が使いたい場合は、EXCELなどのVBAを使う方法がありますが、すごく大変です。
こんな感じで第2水準までしか使えない文字コードを利用して簡単にやっつけちゃいましょう。

C#

1var iso2022 = Encoding.GetEncoding("iso-2022-jp"); 2 3var s1 = "吞兵衛"; 4 5var s2 = iso2022.GetString(iso2022.GetBytes(s1)); 6 7if(s1 == s2) 8{ 9 Console.WriteLine("OK!"); 10} 11else 12{ 13 Console.WriteLine("だめ"); 14}

投稿2018/11/17 10:13

hihijiji

総合スコア4150

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2018/11/17 10:39

その手があったかと唸りました。
guest

0

ベストアンサー

残念ながら、巨大なテーブルを作る他なさそうです。

.NET内部ではUTF-16でシステムが動いていて、そしてSJISとUnicodeの対応は規則性がないので、すべての第一水準・第二水準漢字について1つ1つ変換して値を取る以外に、有効な手段はないと思います。

投稿2018/11/17 09:21

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

0

正規表現に拘らなければ、JIS X0208 と Unicodeの対応表を元にテーブルを作っては?

対応表は、Unicode.org に JIS0208.TXTファイルがあるので、これを元にすれば、良いのでは。

ほとんど、機械的に作れます。

投稿2018/11/17 13:39

pepperleaf

総合スコア6383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問