電子書籍の厳選無料作品が豊富!

webページのソースコードを変数に代入し、
その中から<td class="abc">という文字列の位置を取得したいので

hogehoge = Instr(baf,"<td class="abc">")と指定すると""の部分でエラーになってしまいますので
""をutf-8にあらかじめ変換し、%22で囲ってみました

hogehoge = Instr(baf,"<td class=%22abc%22>")
これでエラーはでませんが、これではソースコードから該当の文字列が探せません。

Instrで指定の文字の位置を取得したいが、その文字列内に「"」が含まれている場合、
どのようにすれば正常に取得できるでしょうか?


よろしくお願いします。

A 回答 (3件)

引用符の中で引用符を表わすには


二重化します。これは#1の方の回答
の通りです。
しかし、InStrより、正規表現を使う方が
より有効です。

Dim 正規表現 As Object
Dim 一致集合 As Object
Dim 一致個別 As Object
Dim テキスト As String
Dim パターン As String

'問題のテキスト
テキスト = "<table><tr> <td class=""abc"">"

'正規表現をインスタンス化する
Set 正規表現 = CreateObject("VBScript.RegExp")
'英字の大文字小文字を区別しない
正規表現.IgnoreCase = False
'最初の検出だけで止める
正規表現.Global = False
'正規表現パターンを設定する
パターン = "<\s*td\s+class\s*=\s*[""']{0,1}abc[""']{0,1}\s*>"
正規表現.Pattern = パターン
'一致する部分の集合を求める
Set 一致集合 = 正規表現.Execute(テキスト)
If 一致集合.Count = 0 Then
  '一致するものが無い場合
  MsgBox "一致する部分がありません"
Else
  '一致する部分を取得する
  Set 一致個別 = 一致集合.Item(0)
  '位置、長さ、内容を取得する
  Dim 位置 As Long, 長さ As Long
  Dim 内容 As String
  位置 = 一致個別.FirstIndex + 1
  長さ = 一致個別.Length
  内容 = 一致個別.Value
End If

この場合、英字の大文字、小文字を区別しない
ことは勿論、< td class = 'abc' > のように前後に
空白が入ったり、アポストロフィで囲まれる、又は
class=abc のように直に指定した場合も検索が
可能です。
また、GlobalプロパティをTrueにすれば、一致する
部分を全て抜き出すことができます。
正規表現パターンはなかなか難しいのですが、
応用範囲が広く、JavaScriptやPHP、Java等でも
出てきますので、使用することを薦めます。

http://msdn.microsoft.com/ja-jp/library/cc392487 …
http://msdn.microsoft.com/ja-jp/library/ae5bf541 …
    • good
    • 0
この回答へのお礼

お返事遅くなりました。
おかげさまで問題解決できました。

ありがとうございます。

お礼日時:2013/02/13 23:00

この件の目的、利用環境、本来の要件や想定ケースの範囲も何もわからない状況で「より有効な道具立て」にまで、言及はできないと思います。


cssクラスの複数指定ケース、他のタグ属性も含むケース等々、可能性を挙げたらきりがないですし。

検索したい文字列が決めうちで良いと判っている場合は、Instrの方がシンプルで良いでしょうし、HTMLとして汎用的な検索をしたいのでしたら、例えばXPathやCSSセレクタ等を使える手段を採用する方が、適切かもしれないわけで、要件等の前提もなしに「より有効な手段」は論じられない、ということです。

なお、サンプルコードまで出てしまっているので指摘しておきますが、正規表現オブジェクトで、大文字小文字の区別をしない場合は、ignoreCaseはTrueですね。
    • good
    • 0

hogehoge = Instr(baf,"<td class=""abc"">")



で、いかがでしょう。
    • good
    • 0

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