C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: 正規表現で全角・半角を区別せずマッチさせるには


(過去ログ 99 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■59045 / inTopicNo.1)  正規表現で全角・半角を区別せずマッチさせるには
  
□投稿者/ ジョニー (1回)-(2011/05/10(Tue) 13:24:54)

分類:[VB.NET/VB2005 以降] 

2011/05/10(Tue) 13:51:04 編集(投稿者)

※RegEx.IsMatchの第1引数と第2引数を逆にしてしまいましたので修正しました。スミマセン。

VB2008の正規表現で、例えば、

RegEx.IsMatch("123ABC456", "ABC")

の戻り値はTrueが返りますが、

RegEx.IsMatch("123ABC456", "ABC")

の戻り値は、全角の"ABC"は対象文字列には含まれないのでFalseとなります。
大文字・小文字を区別しない場合、IsMatchの第3引数にRegexOptions.IgnoreCaseを渡せばいいのですが、
全角・半角を区別しない場合はどうすればよいのでしょうか?

例えば、昔からVBにあるInStrやReplace(RegExのものではない)の引数、CompareMethod.Binaryのようなものが
あればいいなと思いまして。
引用返信 編集キー/
■59047 / inTopicNo.2)  Re[1]: 正規表現で全角・半角を区別せずマッチさせるには
□投稿者/ 魔界の仮面弁士 (2166回)-(2011/05/10(Tue) 13:47:46)
No59045 (ジョニー さん) に返信
> 例えば、昔からVBにあるInStrやReplace(RegExのものではない)の引数、CompareMethod.Binaryのようなものが
> あればいいなと思いまして。
ちなみに CompareMethod.Text や vbTextCompare の場合、
「℃」「c゜」「C゛゛」がすべて同一視されますのでご注意あれ。


> RegEx.IsMatch("ABC", "123ABC456")
> の戻り値はTrueが返りますが、
それは False のハズですよ。True にしたいのであれば、
Regex.IsMatch("123ABC456", "ABC")
にしないと。


> 全角・半角を区別しない場合はどうすればよいのでしょうか?
ret = Regex.IsMatch("123ABC456", "[AA][BB][CC]")
にしてみるとか。

もしくは、Option Compare Text モードで
ret = "123ABC456" Like "*ABC*"
とか。
引用返信 編集キー/
■59048 / inTopicNo.3)  Re[2]: 正規表現で全角・半角を区別せずマッチさせるには
□投稿者/ ジョニー (2回)-(2011/05/10(Tue) 15:11:11)
No59047 (魔界の仮面弁士 さん) に返信
>>RegEx.IsMatch("ABC", "123ABC456")
>>の戻り値はTrueが返りますが、
> それは False のハズですよ。True にしたいのであれば、
> Regex.IsMatch("123ABC456", "ABC")
> にしないと。

全くご指摘の通りです。スミマセン。

>>全角・半角を区別しない場合はどうすればよいのでしょうか?
> ret = Regex.IsMatch("123ABC456", "[AA][BB][CC]")
> にしてみるとか。

やはりそれしかないですか。
もう少し複雑な正規表現パターンを考慮した場合、例えば"ABC"で始まり"DEF"で終わる文字のマッチングなど、
パターンを"[AA][BB][CC].*?[DD][EE][FF]"のようにすればよさそうですね。
これは、[半全]といったパターン文字列を(エスケープ文字を考慮して)生成するようなものを作って対応したいと思います。

ありがとうございました。
その他、もっといいアイディアがありましたら書き込みお願いいたします。
解決済み
引用返信 編集キー/
■59067 / inTopicNo.4)  Re[3]: 正規表現で全角・半角を区別せずマッチさせるには
□投稿者/ shu (683回)-(2011/05/11(Wed) 07:54:37)
No59048 (ジョニー さん) に返信

StrConvで両方の文字列を全角に変換するとか。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -