網頁

9/02/2012

在 LibreOffice Basic 中使用正規表示式搜尋

工作需要自動開啟特性名字的檔案,打算用正規表示式解析檔案名稱,然而LibreOffice Basic本身沒有正規表示式可以用,以下為調用UNO service的方法。

Code
Dim Obj As Object
Dim result as Object
Dim search_opt as object
Obj = createUnoService("com.sun.star.util.TextSearch")
result = createUnoService("com.sun.star.util.SearchResult")

'搜尋設定
search_opt = createUnoStruct("com.sun.star.util.SearchOptions")

'欲比對的 pattern,可用 () 切出 substr
search_opt.searchString="/([a-zA-Z0-9]*).xls"

'設定以正規表示法搜尋
search_opt.algorithmType=com.sun.star.util.SearchAlgorithms.REGEXP

Obj.setOptions(search_opt)

'搜尋字串為 /home/abc/test.xls
result = Obj.SearchForward("/home/abc/test.xls",0,len("/home/abc/test.xls"))

if result.subRegExpressions>0 then

' startoffset(0) 為整個表示式符合的位置,此例回傳 9
Msgbox result.startoffset(0)
' startoffset(1) 為第一個 substr 的位置,此例回傳 10
Msgbox result.startoffset(1)

end if

1 則留言: