人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

VBSについて質問
Set objReg = CreateObject("VBScript.RegExp")
objReg.Pattern=\\\\
Dirpath = objRev.Replace("C:\\test","\")
というコーディングがあります。
結果はDirpath = "C:\test"で適当なのですが、
objReg.Pattern=\\\\という記述の意味がわかりません。
(試しに消してみたら不適当な結果になってしまいました)
objReg.Pattern=\\\\がどういう働きをしているのかどなたか教えてください。

●質問者: harunoharuno
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:regexp SET test VBS VBScript
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● KirakiraHikaru
●22ポイント

objReg.Patternには置換対象を正規表現で指定します。

正規表現で特殊な文字(メタ文字)を使用するにはその文字の前に\を付加する必要があります。

ですので\は\\とする必要があります。

\\は\\\\になります。

Patternに\\\\を指定してobjReg.Replace("C:\\test","\")とすると、

\\を\に置き換えることができます。


ちなみにobjReg.Pattern="\\+"

とすると、\が1以上続く文字列部分が置換対象になるので、

C:\\\testでもC:\testに置換できます。


また

objReg.Pattern="\\+"

objReg.Global=True

Dirpath = objReg.Replace("C:\\test\\\test2\test.txt","\")

のように.Global=Trueとしておくと文字列に含まれる複数の\が1以上続く文字列を\に置換できます。

C:\test\test2\test.txt


下記のページがわかりやすいです。

CodeZine: VBAで正規表現を使う

http://codezine.jp/a/article/aid/1655.aspx?p=1

◎質問者からの返答

わかりやすい解説ありがとうございます。

ついでなんですが

objReg.Pattern = """" & "[^""]+" & """"

の意味も教えていただけませんか?

組み合わせるとわからなくなってしまいます。


2 ● noname
●23ポイント

正規表現はご存知でしょうか?

Set objReg = CreateObject("VBScript.RegExp")

で正規表現を使う準備をし、

objReg.Replace("C:\\test","\")

で"C:\\test"の指定場所を"\"に置き換える(Replace)するわけですが、

この指定場所を表しているのが、

objReg.Pattern="\\\\"

です。

今回のコードでは、

"C:\\test" → "C:\test"のように、文字列中のバックスラッシュを2つを1つに置き換えたいようなので、指定するパターンは"\\"としてよさそうなものですが、

正規表現パターンのなかで\は特殊な意味を持つので、単に文字として\を使いたい場合はエスケープという処理を行う必要があります.

このエスケープ処理をするには直前に\をつける決まりがあるのですが、今回たまたま\をエスケープしたいので、\を2個重ねて\\と表現します。

これがさらにC:\\のように2つあるので、計4つ\\\\と書いています。

よって今回のobjReg.Pattern="\\\\"は、置き換えたい文字列パターンである\\を意味します。

参考ページ

http://www.microsoft.com/japan/msdn/columns/scripting/scripting0...

http://officetanaka.net/excel/vba/tips/tips38.htm


3 ● sunbu
●23ポイント

http://www.microsoft.com/japan/msdn/columns/scripting/scripting0...

正規表現ライブラリにマッチするパターンの指定で、\を指定すると特別な意味を持つのですが、この例のように\自体を指定したいときには\\とすれば\自体の意味になります。

つまり、この例では、\\\\という指定で\\という文字列にヒットさせる、という意味になる訳です。

'ちょっと気になりましたが、\\\\の前後に二重引用符はありませんでした?


4 ● KirakiraHikaru
●22ポイント
objReg.Pattern = """" & "[^""]+" & """"

上記は"[^"]+"という正規表現をパターンに設定しています。


""""は"です。VBSで文字列は"あ"のように"で始まり"で終わらせる必要があります。

ですので、"自体を文字列としたい場合は、""のようにしたものを"で覆います。

a"b"cを文字列として設定したい場合は、"a""b""c"のようにします。


"[^"]+"という正規表現をパターンに設定すると、

"で始まって、"でない文字列が1文字以上続いて、"で終っている部分が対象になります。

・^は、それに続く文字でないという意味

・+は、その前の文字が1以上続くという意味


objReg.Pattern = """" & "[^""]+" & """"
Dirpath = objReg.Replace("aa""bbb""cc","\")

ですので、上記のようにすると、

aa"bbb"ccという文字列の"bbb"部分が置換対象になり、aa\ccに置換されます。

http://q.hatena.ne.jp/

◎質問者からの返答

"文字を入力するときは""と表記するルールがあり、文章の囲いをつけた場合""""となるんですね。

丁寧に解説していただきありがとうございます。本当にわかりやすい解説・・・・

なんですが、正直なれず読み直してしまいました(^^;)

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ