VBSについて質問

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

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/10/26 17:40:14
  • 終了:2007/11/02 17:45:03

回答(4件)

id:KirakiraHikaru No.1

KirakiraHikaru回答回数354ベストアンサー獲得回数682007/10/26 18:21:04

ポイント22pt

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

id:harunoharuno

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

ついでなんですが

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

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

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

2007/10/26 18:52:35
id:takabow No.2

noname回答回数51ベストアンサー獲得回数142007/10/26 18:16:13

ポイント23pt

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

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

id:sunbu No.3

sunbu回答回数14ベストアンサー獲得回数02007/10/26 18:16:47

ポイント23pt

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

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

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

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

id:KirakiraHikaru No.4

KirakiraHikaru回答回数354ベストアンサー獲得回数682007/10/26 19:26:40

ポイント22pt
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/

id:harunoharuno

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

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

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

2007/10/30 13:55:43

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません