[問題] VBA 2010的regular expression如何非貪婪

看板RegExp (正規表示式 Regular Expression)作者 (gecer)時間9年前 (2014/11/12 22:58), 編輯推噓1(105)
留言6則, 2人參與, 最新討論串1/1
/* 聽說註明使用的語言、環境 * 問題有可能較容易被解決... */ 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

11/12 23:33, , 1F
非貪婪只能從由左到右找最短的組合, 由右到左的要用別招
11/12 23:33, 1F

11/12 23:34, , 2F
你的問題可能應該要寫出「123, 跟著一串字當中不能有 123,
11/12 23:34, 2F

11/12 23:34, , 3F
然後 abc」才行, 不過我一下子想不到中間那個要怎麼寫就是
11/12 23:34, 3F

11/25 04:48, , 4F
我覺得可以檢查是否有沒有包含 123 字串做檢查
11/25 04:48, 4F

11/25 04:50, , 5F
123((?!123).)*abc 這樣每次在吃字的時候都會判斷
11/25 04:50, 5F

11/25 04:50, , 6F
右邊是不是有 123 這樣應該可以達到你要的效果 :)
11/25 04:50, 6F
文章代碼(AID): #1KOtMgdJ (RegExp)
文章代碼(AID): #1KOtMgdJ (RegExp)