VBAでは、拡張子なしでUNCパスからファイル名を取得するためにregexを使用しようとしています.TIFファイルのみを見ています。VBA正規表現で非キャプチャグループを使用するには?
Function findTIFname(filestr As String) As String
Dim re As RegExp
Dim output As String
Dim matches As MatchCollection
Set re = New RegExp
re.pattern = "[^\\]+(?:[.]tif)$"
Set matches = re.Execute(filestr)
If matches.Count > 0 Then
output = matches(0).Value
Else
output = ""
End If
findTIFname = output
End Function
をしかし、私は、関数を実行すると、以下のように:
は、これまでのところ、これは私が持っているものである
msgbox findTIFname("\\abc\def\ghi\jkl\41e07.tif")
私が得る次の出力:私は思っ
41e07.tif
"(?:xxx)"は非キャプチャグループの正規表現の構文です。私は何を間違えているのですか?
ニースコード!私は非常に似たようなものを使用しますが、re.patternの2番目のパラメータを使用するので、ハードコードするのではなく、パラメータを渡すことができます。ちょっとしたヒント:VBAは宣言時に自動的にoutput = ""を作成するので、最後にそのElseステートメントは必要ありません。 > 0を使用する代わりに、より良い最適化のために<> 0を使用することができます(不等式のチェックが速くなります)。 – aevanko