プロが教えるわが家の防犯対策術!

VBSで、ドメインを取るプログラムを作りたくて
悪戦苦闘しています。

Dim reg
Dim Matches
Dim testUrl

Set reg = CreateObject("VBScript.RegExp")
reg.Pattern = "/{2}([^/]+)/"

testUrl = "http://www.test.co.jp/test.html" ←ここは実際はメソッドの引数値が入ります

Set Matches = reg.Execute(testUrl)

msgbox Replace(Matches(0).Submatches(0),"www.","")

上記、きちんとしたurlが入ってくる場合はいいのですが、
そうとは限らず、testUrl = "http://www" というような半端な
値が入ってきた場合、落ちてしまいます。
Matches(またはSubmatches)のインデクサがないからだと思われますが、
存在確認をするにはどうしたら良いか、教えていただけないでしょうか。

A 回答 (2件)

質問にあるコードを前提にすると、




If Matches.Count = 0 Then
  msgbox "実行不可形式なURL"
Else
  msgbox Replace(Matches(0).Submatches(0),"www.","")
End If


で済むと思います。

しかし、サブドメインがwwwでないものや、URLの最後が/で終わらないもの
http://blog.test.co.jp/
http://test.co.jp/test.html
http://www.test.co.jp

といったものからドメインの抽出が行えません。
やりたいことにそういったものがなければ良いのですが。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
仰る通り、wwwでないものについて考慮できていませんでしたね…。
ちょっと正規表現を見直してみます。

お礼日時:2011/11/01 10:11

マッチしたかどうかを判断したいのなら、Matchesコレクションの個数 つまり、Matches.count > 0 で判断できます。



ドメインの次の / が省略されている場合でもと言うことであれば、

reg.Pattern = "/{2}([^/]+)/?"

ですね。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
末尾省略は考慮できておりませんでしたので、大変助かりました。
ありがとうございます。

お礼日時:2011/11/01 10:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!