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

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

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

Re[2]: VBAで正規表現 パターンに一致しない


(過去ログ 131 を表示中)

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

■77357 / inTopicNo.1)  VBAで正規表現 パターンに一致しない
  
□投稿者/ ken (1回)-(2015/10/14(Wed) 00:49:27)

分類:[VBScript] 

VBAについてお教えください。下記のような文字列があります。

abc,"123,456",def,"789,123"

カンマが含まれている文字列を取得したいと思っています。
ここでは、"123,456"と"789,123"を取得したいと思っています。
そこで、下記のコードを実行すると、"123,456",def,"789,123"が取得されます。

正規表現のパターンが不味いのはなんとなくわかるのですが、何が悪いかわかりません。
よろしくお願いします。

Dim RE
Dim objMatches

Set RE = CreateObject("VBScript.RegExp")
RE.Pattern = """.+,.+"""
Set objMatches = RE.Execute(str) 'strにabc,"123,456",def,"789,123"が格納されている

For i=0 To (objMatches.Count - 1)
    WScript.Echo objMatches.Item(i).Value
Next

Set objRE = Nothing

引用返信 編集キー/
■77358 / inTopicNo.2)  Re[1]: VBAで正規表現 パターンに一致しない
□投稿者/ 魔界の仮面弁士 (522回)-(2015/10/14(Wed) 08:56:13)
2015/10/14(Wed) 09:11:09 編集(投稿者)

No77357 (ken さん) に返信
> VBAについてお教えください。下記のような文字列があります。
VBA に WScript オブジェクトはありません。
VBS の間違いではありませんか?


> Set objMatches = RE.Execute(str) 'strにabc,"123,456",def,"789,123"が格納されている
VBA には「Str 関数」が用意されています。予約語では無いので
コンパイルは一応通りますが、誤解を避けるためにも
str という変数名は避けた方が無難です。

なお、VBS に Str 関数はありません。(CStr ならありますが)


> そこで、下記のコードを実行すると、"123,456",def,"789,123"が取得されます。
> RE.Pattern = """.+,.+"""
最長一致になるためです。最短一致にしたい場合は、
繰り返しの後に ? を付与してみて下さい。

RE.Pattern = """.+?,.+?"""
RE.Global = True


> Set objRE = Nothing
「Set RE = Nothing」ではなく?

変数名のスペルミスを防ぐためにも、
コード先頭に『Option Explicit』を付与されることをお奨めします。
引用返信 編集キー/
■77463 / inTopicNo.3)  Re[2]: VBAで正規表現 パターンに一致しない
□投稿者/ ken (2回)-(2015/10/22(Thu) 07:49:47)
最長一致、最短一致について知りませんでした。まだ、正規表現について勉強不足でした。
お教え頂いた通り実行したら問題なく問題が解決できました。ありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -