VBA正規表現で否定的および肯定的な後読みを行う方法はありますか?
文字列が「A」で始まる場合は一致させたくないので、現在、パターンの先頭で ^A を実行してから、match(0) の最初の文字を削除しています。明らかに最善の方法ではありません!
regExp オブジェクトを使用しています。
VBA正規表現で否定的および肯定的な後読みを行う方法はありますか?
文字列が「A」で始まる場合は一致させたくないので、現在、パターンの先頭で ^A を実行してから、match(0) の最初の文字を削除しています。明らかに最善の方法ではありません!
regExp オブジェクトを使用しています。
VBAは、ポジティブとネガティブの先読みを提供しますが、一貫性のない後読みはありません。
私が見たVBAで正規表現を使用する最良の例は、PatrickMatthewsによるこの記事です。
Execute
[ではなくを使用して例を更新Replace
]
私はあなたの使用法について完全には明確ではありませんが、あなたはこのような関数を使用することができます
それで始まらないすべての単語については、2番目の文字以降のすべてを返します(サブマッチを使用-内部のパターンで(
あり、)
サブマッチ1-
Sub TestString()
MsgBox ReducedText("cfat dcat")
MsgBox ReducedText("Sat all over the hat again")
End Sub
Function ReducedText(strIn As String) As String
Dim objRegex As Object
Dim objRegMC As Object
Dim objRegM As Object
Dim strOut As String
Set objRegex = CreateObject("vbscript.regexp")
With objRegex
.IgnoreCase = True
'not needed if matching the whole string
.Global = True
.Pattern = "\b[^a\s]([a-z]+)"
If .test(strIn) Then
Set objRegMC = .Execute(strIn)
For Each objRegM In objRegMC
strOut = strOut & objRegM.submatches(0) & vbNewLine
Next
ReducedText = strOut
Else
ReducedText = "Starts with A"
End If
End With
End Function
キャプチャされていないグループに ^A を配置し、Match オブジェクトの SubMatches プロパティを使用して一致した値を取得するのはどうですか?