ボンジュール・マドモアゼル

本サイトの情報は自己責任にてご利用下さい。

[VBScript] VBScript RegExp MultiLine まとめ

 
MultiLine を有効にすると、ラインフィード(LF)で区切られた入力文字列を複数行として扱う。
^, $が文字列の全体の始端と終端にマッチする特殊文字から、
文字列内の各行の始端と終端にマッチする特殊文字に変化する。

注意事項

以下、確認用のサンプルコード。出力結果を先に確認する方が分かりやすい。
' TestRegExp.vbs


Option Explicit

Dim re
Set re = CreateObject("VBScript.RegExp")
Dim Patterns(1)

Main

Public Sub Main()

re.Global = True
re.IgnoreCase = True

Patterns(0) = "^a.*b$"
Patterns(1) = "^a(?:.|x0A)*b$"

WScript.Echo "以下では <Cr> は文字コード 0x0D を示し <Lf> は文字コード 0x0A を示す。"

Test "a1b" & vbCrLf & "a2b" 'vbCrLf = 0x0D0A
Test "a1b" & vbCr & "a2b" 'vbCr = 0x0D
Test "a1b" & vbLf & "a2b" 'vbLf = 0x0A

End Sub

Sub Test(s)
WScript.Echo String(50, "-")
WScript.Echo "String:""" & ToPrintString(s) & """"
WScript.Echo

re.Multiline = False
TestSub s

re.Multiline = True
TestSub s

End Sub

Sub TestSub(s)
Dim i
For i = LBound(Patterns) To UBound(Patterns)
re.Pattern = Patterns(i)
PrintResult s
Next
End Sub

Sub PrintResult(s)
WScript.Echo vbTab & "Multiline:" & vbTab & vbTab & re.Multiline
WScript.Echo vbTab & "Pattern:" & vbTab & vbTab & re.Pattern
WScript.Echo vbTab & "Test(""" & ToPrintString(s) & """):" & vbTab & re.Test(s)
WScript.Echo vbTab & "MatchCollection:" & vbTab & ToPrintString(MatchCollectionToString(re.Execute(s)))
WScript.Echo
End Sub


Function MatchCollectionToString(mtchs)
If mtchs.Count > 0 Then
Dim buf()
ReDim buf(mtchs.Count - 1)

Dim i
For i = 0 To mtchs.Count - 1
buf(i) = "[" & mtchs(i) & "]"
Next
MatchCollectionToString = Join(buf, ", ")
End If
End Function


Function ToPrintString(s)
Dim t
t = s
t = replace(t, vbCr, "<Cr>")
t = replace(t, vbLf, "<Lf>")
ToPrintString = t
End Function
出力結果
C:\>cscript TestRegExp.vbs

Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

以下では <Cr> は文字コード 0x0D を示し <Lf> は文字コード 0x0A を示す。
--------------------------------------------------
String:"a1b<Cr><Lf>a2b"

Multiline: False
Pattern: ^a.*b$
Test("a1b<Cr><Lf>a2b"): False
MatchCollection:

Multiline: False
Pattern: ^a(?:.|\x0A)*b$
Test("a1b<Cr><Lf>a2b"): True
MatchCollection: [a1b<Cr><Lf>a2b]

Multiline: True
Pattern: ^a.*b$
Test("a1b<Cr><Lf>a2b"): True
MatchCollection: [a1b], [a2b]

Multiline: True
Pattern: ^a(?:.|\x0A)*b$
Test("a1b<Cr><Lf>a2b"): True
MatchCollection: [a1b<Cr><Lf>a2b]

--------------------------------------------------
String:"a1b<Cr>a2b"

Multiline: False
Pattern: ^a.*b$
Test("a1b<Cr>a2b"): True
MatchCollection: [a1b<Cr>a2b]

Multiline: False
Pattern: ^a(?:.|\x0A)*b$
Test("a1b<Cr>a2b"): True
MatchCollection: [a1b<Cr>a2b]

Multiline: True
Pattern: ^a.*b$
Test("a1b<Cr>a2b"): True
MatchCollection: [a1b<Cr>a2b]

Multiline: True
Pattern: ^a(?:.|\x0A)*b$
Test("a1b<Cr>a2b"): True
MatchCollection: [a1b<Cr>a2b]

--------------------------------------------------
String:"a1b<Lf>a2b"

Multiline: False
Pattern: ^a.*b$
Test("a1b<Lf>a2b"): False
MatchCollection:

Multiline: False
Pattern: ^a(?:.|\x0A)*b$
Test("a1b<Lf>a2b"): True
MatchCollection: [a1b<Lf>a2b]

Multiline: True
Pattern: ^a.*b$
Test("a1b<Lf>a2b"): True
MatchCollection: [a1b], [a2b]

Multiline: True
Pattern: ^a(?:.|\x0A)*b$
Test("a1b<Lf>a2b"): True
MatchCollection: [a1b<Lf>a2b]
  1. 2012/03/17(土) 12:06:29|
  2. VBScript|
  3. トラックバック(-)|
  4. コメント:0

[Win32API] GetDeviceCaps Caps 略

 
(Caps は capabilities の意味です。)
http://mail2.nara-edu.ac.jp/~asait/visual_cpp/scroll/scroll3.htm
  1. 2012/03/10(土) 00:57:10|
  2. Win32API|
  3. トラックバック(-)|
  4. コメント:0

[Visual Basic] VBA, VBの Enum 定数の大文字, 小文字の綴りをIDEに認識させる

 
VBA の IDE では Enum 定数の定数名を直打ちすると、
Enumステートメントで定義された通りに大文字・小文字が変換されることはなく、
Enum 定数の定義が、直打ちされた大文字、小文字で上書きされてしまう。
リンク先の方法が使えば、これを防げる。

http://www.geocities.jp/teio_n1976/vb101/001.html
VisualBasic 怒涛のTips101 — 1. Enumで大文字小文字の区別を強制する

リンク先では、IDEの為の変数定義をパブリック変数としているが、
Enum 定数自体パブリックでも、下のようにプライベート変数としても有効。
Public Enum MyEnum

EnumOne = 1
EnumTwo = 2
EnumThree = 3
End Enum

'IDEにEnum定数名の大文字・小文字を認識させる為の対処
#If False Then
Private EnumOne
Private EnumTwo
Private EnumThree
#End If

前のページ