私が何を求めているのかをサンプルコードで説明します。私の関数GetDox
は近くに見えますが、まだ不完全です。これがテストコードです。
'test begin...
'<dox>
' <member type="Public Sub" name="Increment" return="void">
' <param type="Integer" name="nBase" out="true" />
' <param type="Integer" name="nStep" out="false" />
' <purpose>
' purpose here...
' </purpose>
' </member>
' <member ... />
'</dox>
'other comments here...
Public Sub Increment(nBase, nStep) 'some example content
nBase = nBase + nStep
End Sub
'<Unwonted_Item />
Dim source 'reading the same file just for simplification
With CreateObject("Scripting.FileSystemObject")
With .OpenTextFile(WScript.ScriptFullName, 1, False)
source = .ReadAll
End With
End With
result = GetDox(source)
WScript.Echo result 'display our result
Function GetDox(sCode) 'unfinished function
Dim regEx, Match, Matches, mVal, sEnd
sEnd = "</dox>" & vbNewLine
Set regEx = New RegExp
regEx.Pattern = "('<dox>\n|'\s*<.*)" 'my ugly pattern
regEx.IgnoreCase = True
regEx.Global = True
Set Matches = regEx.Execute(sCode)
For Each Match In Matches
mVal = Match.Value
mVal = Replace(mVal, vbCr, vbNewLine)
mVal = Right(mVal, Len(mVal) - 1)
GetDox = GetDox & mVal
If mVal = sEnd Then Exit For
Next
End Function
これは私が得るものです:
<dox>
<member type="Public Sub" name="Increment" return="void">
<param type="Integer" name="nBase" out="true" />
<param type="Integer" name="nStep" out="false" />
<purpose>
</purpose>
</member>
<member ... />
</dox>
そして、これは私が必要なものです:
<dox>
<member type="Public Sub" name="Increment" return="void">
<param type="Integer" name="nBase" out="true" />
<param type="Integer" name="nStep" out="false" />
<purpose>
purpose here...
</purpose>
</member>
<member ... />
</dox>
「ここでの目的...」の行が欠落していて、RegExp.Pattern
構文全体が弱いことを私は知っています。すべてを含めることで始まり、すべてを含むことで<dox>
終わるコンテンツ全体を選択したいのですが、パターン構文に固執しています。</dox>
PS 非常に優れた助けを借りて(すべての人に感謝します)、これが私の作業機能です:
Function GetDox(sCode)
GetDox = vbNullString
With New RegExp
.Pattern = "<dox>[\s\S]*?</dox>"
.IgnoreCase = True
.Global = False
With .Execute(sCode)
If .Count = 0 Then Exit Function
GetDox = .Item(0).Value
End With
.Pattern = "^'"
.Global = True
.Multiline = True
GetDox = .Replace(GetDox, "")
End With
End Function