VBScript Regular Expressions ライブラリは 5.5 を使おうね

Excel VBA で、MSHTML.HtmlDocument クラスの createDocumentFromUrl メソッドを使って取得した HTML ドキュメントの中から正規表現を使って文言を抜き出す処理を書いている。

具体的には「JVN iPedia - 脆弱性対策情報データベース」の詳細情報ページから、例えば「想定される影響」と「対策」の部分を抜き出し、Excel上の特定のセルに貼り付ける・・・というような処理だ。

該当する部分の HTML ソースは、例えば、

....
<TR>
<TD class=vuln_table_clase_td_header colSpan=2><A
name=impact>想定される影響</A> </TD></TR>
<TR>
<TD colSpan=2><BR>
<BLOCKQUOTE>攻撃者により、巧妙に細工された utf-8 データを介して、サービス運用妨害 (無限ループ)
状態にされる可能性があります。 </BLOCKQUOTE></TD></TR>
<TR>
<TD class=vuln_table_clase_td_header colSpan=2><A name=solution>対策</A>
</TD></TR>
<TR>
<TD colSpan=2><BR>
<BLOCKQUOTE>ベンダより正式な対策が公開されています。ベンダ情報を参照して適切な対策を実施してください。
</BLOCKQUOTE></TD></TR>
....

このような感じなので、

<A name=impact>想定される影響<\/A>[\s\S]+?<BLOCKQUOTE>([\s\S]+?)<\/BLOCKQUOTE>[\s\S]+?<A name=solution>対策<\/A>[\s\S]+?<BLOCKQUOTE>([\s\S]+?)<\/BLOCKQUOTE><\/TD><\/TR>

こういうマッチングパターン(ベタですまん(^^;もちろんもっと簡潔にすることはできるが、あとから他人がメンテナンスすることを考えて、あえてベタベタにしてるんだということは言うとく。正規表現に関しては口うるさい人間が多いからな(笑))抜くことができるんだけど、うまくいかない。

※ちなみに、Microsoft の正規表現では、改行コードも含んだ任意の文字列だと、.+ ではなく [\s\S]+ と書かないといけないらしい(^^;アホや(笑)

結論から言えば、参照するライブラリファイルとして、Microsoft VBScript Regular Expressions 1.0 と Microsoft VBScript Regular Expressions 5.5 の両方が参照設定されており、1.0の方が優先順位が高かったため。

20160614_regex1.jpg

1.0は、まさに「お馬鹿」な Microsoft 技術者が作りました感満載の糞しょぼい正規表現ライブラリで、複数行へのマッチングオプションなどは考えられていないのだ。

例えば改行を含んだ(つまり複数行の)データにマッチングさせるためのプロパティを、

Dim re As New RegExp
re.MultiLine = True
....

このように設定していると、「コンパイルエラー:メソッドまたはデータメンバーが見つかりません。」というエラーが発生し、VBAスクリプトの実行ができない。しょぼ。

20160614_regex2.jpg

1.0の優先度を 5.5より落とせばいいが、5.5を参照しているのに 1.0も参照対象として残しておく意味もないので、1.0は参照対象から外してしまおう。

ちなみに、インスタンス化するとき、

Dim re As VBScript_RegExp_55.RegExp
re.MultiLine = True
....

このように明示的にバージョン設定することも可能なようだ。
もう、VBA やってると精神的に疲れるので試してないけど(^^;;;

トラックバック(0)

このブログ記事を参照しているブログ一覧: VBScript Regular Expressions ライブラリは 5.5 を使おうね

このブログ記事に対するトラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/3977

コメントする

このブログ記事について

このページは、shinodaが2016年6月14日 11:34に書いたブログ記事です。

ひとつ前のブログ記事は「Yashica-44 が一台増えた」です。

次のブログ記事は「カープ、史上初のコリジョンルールでサヨナラ勝ちだぜ!」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら