![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
webページのソースコードを変数に代入し、
その中から<td class="abc">という文字列の位置を取得したいので
hogehoge = Instr(baf,"<td class="abc">")と指定すると""の部分でエラーになってしまいますので
""をutf-8にあらかじめ変換し、%22で囲ってみました
hogehoge = Instr(baf,"<td class=%22abc%22>")
これでエラーはでませんが、これではソースコードから該当の文字列が探せません。
Instrで指定の文字の位置を取得したいが、その文字列内に「"」が含まれている場合、
どのようにすれば正常に取得できるでしょうか?
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
引用符の中で引用符を表わすには
二重化します。これは#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 …
No.3
- 回答日時:
この件の目的、利用環境、本来の要件や想定ケースの範囲も何もわからない状況で「より有効な道具立て」にまで、言及はできないと思います。
cssクラスの複数指定ケース、他のタグ属性も含むケース等々、可能性を挙げたらきりがないですし。
検索したい文字列が決めうちで良いと判っている場合は、Instrの方がシンプルで良いでしょうし、HTMLとして汎用的な検索をしたいのでしたら、例えばXPathやCSSセレクタ等を使える手段を採用する方が、適切かもしれないわけで、要件等の前提もなしに「より有効な手段」は論じられない、ということです。
なお、サンプルコードまで出てしまっているので指摘しておきますが、正規表現オブジェクトで、大文字小文字の区別をしない場合は、ignoreCaseはTrueですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Visual Basic(VBA) Excel VBAでAA(BBB) → BBB.AA に置換したい 2 2022/10/30 13:59
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/08 09:05
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正規表現 英数字を1つ以上含む...
-
指定した文字列を複数含むとい...
-
「何とかで始まり、何とかで終...
-
何故、日本は未だに数字を3桁...
-
Malformed UTF-8 character
-
プログラミングでは、半角括弧...
-
ACCESSの表で罫線を使うと縦方...
-
正規表現について教えてください
-
CSVファイルの中で、「 , 」カ...
-
住宅にカナを入力する際に丁目...
-
PHPの文字化けについて
-
メールのURLがつながってしまう
-
いまスマホからカードの申込み...
-
unicodeの表示
-
スペースで区切られた氏名から...
-
dat形式ををcsv形式に変更したい。
-
python 大文字小文字を区別しな...
-
jcode.plのかわり
-
対称群はなぜそう呼ばれるので...
-
vba アクティブシートの名前変...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【abc】に【完全一致】する正規...
-
入力された文字列が、LD22000を...
-
「何とかで始まり、何とかで終...
-
VBA EXCEL あるセルの中の一...
-
正規表現の否定先読みで、複数...
-
バッチファイルの正規表現を利...
-
「abcで始まらない」を正規表現...
-
角カッコが含まれてるかどうか...
-
正規表現
-
正規表現 英数字を1つ以上含む...
-
VBAのInstrについて
-
文字連続の検出手段
-
文頭・文末の記号をチェック
-
空白の制御
-
intの挙動?
-
VBにおける文字列の部分一致検索
-
マクロ・VB得意な人へ。指定し...
-
文字と数字の判定
-
CGI.pmで'&'が'&'に置き換...
-
XML::Xpathで部分一致検索をす...
おすすめ情報