作者gecer (gecer)
看板RegExp
標題[問題] VBA 2010的regular expression如何非貪婪
時間Wed Nov 12 22:58:48 2014
/*
聽說註明使用的語言、環境
*
問題有可能較容易被解決...
*/
excel 2010 win7
code is as below
Option Explicit
Sub t()
Dim reg As Object
Dim s As String
Dim match As Object
Set reg = CreateObject("VBScript.RegExp")
reg.Pattern = "(123.*?abc)"
reg.ignoreCase = True
reg.MultiLine = False
reg.Global = True
s = "dfr123 123 1235abc"
Set match = reg.Execute(s)
End Sub
and the result is
http://i.imgur.com/VZda4lY.png
小弟想要抓到最短的1235abc 字串 請問要如何更正?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.255.27.116
※ 文章網址: http://www.ptt.cc/bbs/RegExp/M.1415804330.A.9D3.html
推 LPH66: 非貪婪只能從由左到右找最短的組合, 由右到左的要用別招 11/12 23:33
→ LPH66: 你的問題可能應該要寫出「123, 跟著一串字當中不能有 123, 11/12 23:34
→ LPH66: 然後 abc」才行, 不過我一下子想不到中間那個要怎麼寫就是 11/12 23:34
→ lin1987www: 我覺得可以檢查是否有沒有包含 123 字串做檢查 11/25 04:48
→ lin1987www: 123((?!123).)*abc 這樣每次在吃字的時候都會判斷 11/25 04:50
→ lin1987www: 右邊是不是有 123 這樣應該可以達到你要的效果 :) 11/25 04:50