Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

20 Апрель 2021, 22:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Использование регулярных выражений при работе с типом String  (Прочитано 2817 раз)
0 Пользователей и 1 Гость смотрят эту тему.
karpo518
Форумчанин
***
Offline Offline

Сообщений: 51


« Ответ #38768: 15 Ноябрь 2016, 13:37 »

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. Есть замечания по такому алгоритму?
Записан

Linux Mint 18 (64 bit),  LibreOffice 5.1.6.2
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!