' VBSでのhtmlタグ要素名の置換
' htmlファイルのタグ名を小文字に統一するスクリプトを作りたいと思っています。
' で、以下のスクリプトを書きました。(問題は置換処理だけなので要点をシンプルに抜き出しました)
' 要素名をすべて記述するのではなく、「<[A-Z]+」等のように記述してヒットした結果を
' 小文字化するなどして置換をおこないたいと思っています。
' (将来的には属性名も対応したいと思っています)
' ずばりそのものの記述・代替案等を希望しています。
' よろしくお願いします。
' ※可能ならコードonlyで会話しましょう。

Option Explicit

Dim reg
Set reg = New RegExp


Function replace(bodyStr, beforeStr, afterStr)
reg.Pattern = beforeStr
reg.Global = True
replace = reg.Replace(bodyStr, afterStr)
End Function


Dim fileText
fileText = "<HTML>HTML</HTML>"

' 要素名の小文字化
' fileText = replace(fileText, "<HTML+", "<html")
' fileText = replace(fileText, "</HTML", "</html")
fileText = replace(fileText, "<[A-Z]+", LCase(RegExp.$1))


If fileText = "<html>HTML</html>" Then
MsgBox "期待通り!"
Else
MsgBox "これじゃダメだよ…orz:" + fileText
End If

このQ&Aに関連する最新のQ&A

A 回答 (2件)

>問題は置換処理だけなので要点をシンプルに抜き出しました


とのことですが、お示しのコードを実行すると、「RegExp.$1」のところでエラーになってしまって、よく分かりませんので、下記の様になコードを書いて実行してみました。
 ご参考になれば幸いです。

Option Explicit
Dim reg
Set reg = New RegExp
Dim beforeStr
beforeStr = InputBox("HTML タグを入力してください。", "htmlタグ要素名の置換")
With reg
.Pattern = "<[^ >]*"
.Global = True
End With
Dim fileText
Set fileText = reg.Execute(beforeStr)
Dim i, afterStr
afterStr = beforeStr
For i = 0 To fileText.Count - 1
afterStr = replace(afterStr, fileText(i), LCase(fileText(i)))
Next
MsgBox afterStr
    • good
    • 0
この回答へのお礼

>「RegExp.$1」のところでエラーになってしまって、

これはJScriptでの書き方です。
もし両方わかる人だったらすぐに伝わるだろうと思って書きました。
なんとなく意図を伝えようとしているだけでVB系のコードとしては
特に意味はありません。


教えていただいたコードでやりたいことは達成できました。
また、最初に私が考えていた方法では無理そうということもわかりました。

参考になりました。
ありがとうございました。

お礼日時:2009/05/19 15:44

VBSの場合は RegExpのExecuteでMatchesコレクションを取得して処理します



Dim objMatchColl, objMatch
Set objMatchColl = Reg.Execute( fileText )
for each objMatch in objMatchColl
  Reg.Replace(fileText, LCase( objMatch ) )
next
といった具合でしょう

入れ子になったタグを処理したいなら patternを "<([A-Z].*?)>(.*?)<\/\1>"などとして
if objMatchColl.Count > 1 then
' 再帰呼び出しで objMatchColl(1)を処理する
end if
といった処理が必要になってくるでしょう
    • good
    • 0
この回答へのお礼

なるほど。for each のほうがスマートですね。
参考になりました。ありがとうございました。

お礼日時:2009/05/22 01:09

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBScriptから指定URLを開く方法

 ある特定のWebページをVBScriptから開きたいのですが方法が探せませんでした。VBScriptからWebページを開く方法、もしくはhttp putを行う方法を教えてください。よろしくお願いします。

Aベストアンサー

こんなので、どうでしょうか?

Set objIE = Wscript.CreateObject("InternetExplorer.Application")
objIE.Navigate2 "http://www.goo.ne.jp/"
objIE.Visible = TRUE
Set objIE =Nothing

Qエクセル VBA セルの個数を所得する

いつも皆様には大変お世話になっております。

早速の質問ですが、

    A    B     C     D     E
1
2       123
3       123
4       123
5       123
6
7       123
とエクセルのセルがなっている場合の
上のB2から下のB7までのセルの個数を所得したいのです
B8以降にも数字が入る場合があるのと間に空白が入る場合があるので
困っています。
B2のセルは固定となっているのでB2からの判別で問題ない状況です。
どうぞ皆様お知恵をお借りしたく思っておりますのでよろしくお願いいたします。

Aベストアンサー

質問が非常に不明確なのですが・・・

所得?取得ですよね?

単にB2:B7のセルの個数をVBAで取得するなら
MsgBox Range("B2:B7").Count

B2:B7の空白でないセルの個数なら
MsgBox Application.CountA(Range("B2:B7"))

B7まででなくB2からB列のデータがある最後までのセル個数なら
MsgBox Range("B2:B" & Cells(Rows.Count, "B").End(xlUp).Row).Count

B2からB列のデータがある最後までの空白でないセル個数なら
MsgBox Application.CountA(Range("B2:B" & Cells(Rows.Count, "B").End(xlUp).Row))

QVBAを使ってHTMLソースから特定の文字列を抽出したいと思っています

VBAを使ってHTMLソースから特定の文字列を抽出したいと思っています。
正規表現を利用してタグに挟まれた文字を抽出したいのですがうまくいきません。
タグごと抽出する方法でも構わないので教えてください。

例えば
<a href="www.yahoo.com△">○○○</a>   ・・・<1>
※△は(www.yahoo.com)+(半角数字1文字)
※○○○は1文字以上の全角文字

このようなパターンの文字列(<1>を丸ごと)を抜き出すには
どのような正規表現を書けばよいでしょうか?
単に<a href ではじまって </a>  で終わる文字列であれば
<a href.*</a>
で良いと思うのですが、もう少し範囲を絞れば目的の文字列だけを抽出できるので
ぜひ実現させたいと思っています。宜しくお願いします。

Aベストアンサー

 正規表現による抽出にこだわらないでしたら、
>例えば
の答えは、[Links プロパティ] により、 下記のような方法で
>タグごと抽出する
こともできますし、
>もう少し範囲を絞れば目的の文字列だけを抽出
することもできます。

Sub test()
 Dim objIE As Object
 Dim i As Long
 Set objIE = CreateObject("InternetExplorer.Application")
 With objIE
  .navigate "http://www.yahoo.com/"
  While .Busy Or .ReadyState <> 4: DoEvents: Wend
  With .Document
   For i = 0 To .Links.Length - 1
    Cells(i + 1, 1) = .Links(i).outerHTML
    Cells(i + 1, 2) = .Links(i).outerText
   Next
  End With
 End With
 objIE.Quit
 Set objIE = Nothing
End Sub

 正規表現による抽出にこだわらないでしたら、
>例えば
の答えは、[Links プロパティ] により、 下記のような方法で
>タグごと抽出する
こともできますし、
>もう少し範囲を絞れば目的の文字列だけを抽出
することもできます。

Sub test()
 Dim objIE As Object
 Dim i As Long
 Set objIE = CreateObject("InternetExplorer.Application")
 With objIE
  .navigate "http://www.yahoo.com/"
  While .Busy Or .ReadyState <> 4: DoEvents: Wend
  With .Document
   For i = 0 To .Links.Lengt...続きを読む


人気Q&Aランキング

おすすめ情報