
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ランキング
-
「何とかで始まり、何とかで終...
-
VBA EXCEL あるセルの中の一...
-
バッチファイルの正規表現を利...
-
正規表現の否定先読みで、複数...
-
正規表現のAND条件記述手法
-
「abcで始まらない」を正規表現...
-
角カッコが含まれてるかどうか...
-
CSVファイルの中で、「 , 」カ...
-
エクセルで数値を全角文字(カ...
-
マクロを使ってフォルダー内に...
-
CString型からdouble型への変換
-
EXCELからCSVにすると余計なカ...
-
C#で、テキストボックスの入力...
-
Excelについて質問です。 セル...
-
住宅にカナを入力する際に丁目...
-
CSVの定義
-
CString から LPCTSTRの型に変換
-
WORDで改ページすると時々グレ...
-
英数字のみ全角から半角に変換
-
C#で空白行を削除する方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「何とかで始まり、何とかで終...
-
角カッコが含まれてるかどうか...
-
VBA EXCEL あるセルの中の一...
-
正規表現の否定先読みで、複数...
-
バッチファイルの正規表現を利...
-
「abcで始まらない」を正規表現...
-
正規表現 英数字を1つ以上含む...
-
最短一致の使い方
-
正規表現に当てはまる文字列を...
-
英数字混じり8文字以上の正規表現
-
正規表現で、ある文末に不一致...
-
CSVのRegexでの分割
-
文字列から数値を抽出したいの...
-
拡張子の正規表現
-
入力された文字列が、LD22000を...
-
XML::Xpathで部分一致検索をす...
-
【abc】に【完全一致】する正規...
-
正規表現の 「?」 の使い方に...
-
ASP言語での正規表現の書き方
-
CSVファイルの中で、「 , 」カ...
おすすめ情報