こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

正規表現 Microsoft VBScript Regular Expression 5.5

Microsoft VBScript Regular Expression 5.5を参照設定でVBから使ってます。
このRegExpオブジェクトがどうも挙動不審。

Dim REFind As New RegExp
REFind.Pattern = "そのた"
REFind.IgnoreCase = True
REFind.Global = True
REFind.MultiLine = True
If REFind.Test(moji) Then hogehoge ....

というところで、まずぜんぜん "そのた" という文字列が入った文字列にマッチしません。

REFind.Pattern = "の"

とかやると、"そのた\ほげほげ" とかにはマッチしますが、"ほげほげ そのた" とかにはマッチしません。
内部で日本語には対応してないんでしょうか?

Replaceメソッドで置換文字列としてUNICODE依存のハートマークなどを入れてみましたが、ちゃんとハートに置換してくれました。
だから内部処理はUNICODEだと思うのですが。

それとも、そもそもVBScriptとか書いてあるものをVBから使うのが間違い?

ちなみにこのプログラムはFindFirstFileWから受け取ったファイルを正規表現で絞って、さらに正規表現を使って一括でファイル名の変更やコピーなどを行うプログラムです(全然できてませんが)。
表示にはMSForms2.0を使い、正規表現の部分を除けば、ちゃんとFindFirstFileWから受け取ったハートマーク付きのファイルを表示しています。
特にUNICODE依存の文字に置換しようとか思ってるわけじゃないですが。
なので、表示部などのバグではないと思います。

この挙動不審の原因が分かる方、または挙動不審でない正規表現を扱える(できればUNICODE)オブジェクトライブラリなどをご存じの方いらっしゃったらお願いします。

---
W2K+VB6

投稿日時 - 2003-01-11 01:23:33

QNo.442538

困ってます

質問者が選んだベストアンサー

Dim REFind As New RegExp

 これ、変じゃないですか?

Dim REFind As Object
Set REFind = New RegExp

 Dimでは変数を定義するだけですから、そのあとで定義した変数にRegExpオブジェクトをSetしてやる必要が有ると思いますが?

>それとも、そもそもVBScriptとか書いてあるものをVBから使うのが間違い?

 RegExpオブジェクトはWindowsが公開しているオブジェクトですから、どの言語から利用しても間違いじゃありませんよ。

 なお、RegExpについては、MSのScriptingテクノロジーのページから、Windows Scripting Hostのドキュメントをダウンロードして参照すると、MSDN全体から読み出すよりも簡潔に書かれているので、読みやすいと思います。

参考URL:http://www.asia.microsoft.com/japan/msdn/scripting/default.asp

投稿日時 - 2003-01-11 01:58:58

お礼

回答ありがとうございます。

Dim REFind As Object
とすると、実行時バインドが起こるので、オーバーヘッドが起こります。
サンプルでは
Dim REFind As RegExp
Set REFind = New RegExp
としてますが、再確保したり解放したりしない限りは私がやってるのと同じでしょう。

やはりリファレンスには、内部の処理の文字コードなどについては触れてないみたいですね。
他のところでももっと自分で調べてみることにします。

投稿日時 - 2003-01-11 12:04:28

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問