rami, спасибо. Помогло. Хочу сделать из этой функции универсальный инструмент, как для замены вхождения, так и для поиска. Пока сделал такой вариант:
Function RegExSubst(targetStr as string, searchForStr as string, replaceStr, flags as integer) As String
Dim options as new com.sun.star.util.SearchOptions
options.algorithmType = com.sun.star.util.SearchAlgorithms.REGEXP
flagOp = ""
if (flags and 1) = 1 then
flagOp = "i"
end if
flagStr = ""
if len(flagOp) > 0 then
flagStr = "(?" & flagOp & ")"
end if
options.searchString = flagStr & searchForStr
ts = CreateUnoService("com.sun.star.util.TextSearch")
ts.setOptions(options)
r = ts.searchForward(targetStr, 0, Len(targetStr))
if r.subRegExpressions = 0 then
if IsNull(replaceStr) then
RegExSubst = False
else
RegExSubst = targetStr
end if
else
if IsNull(replaceStr) then
RegExSubst = True
else
subCount = r.subRegExpressions
replaceText = replaceStr
i = 0
start = 1
Do
ref = "\" & CStr(i)
n = InStr(start, replaceText, ref)
if n > 0 then
refStr = mid(targetStr, r.startOffset(i) +1, r.endOffset(i) - r.startOffset(0))
replaceText = left(replaceText, n-1) & refStr & right(replaceText, len(replaceText) -(n + len(ref))+1)
start = n + len(replaceText)
else
i = i + 1
end if
Loop While i < subCount
RegExSubst = left(targetStr, r.startOffset(0)) & replaceText & mid(targetStr, r.endOffset(0) +1, 65535)
end if
end if
End Function
Для поиска вместо строки для замены нужно передавать в функцию null. Есть замечания по такому алгоритму?