|
本帖最后由 onthetrip 于 2024-6-25 08:36 编辑
今天在学习这个帖子正则表达式入门与提高-VBA平台的正则学习参考资料-Excel VBA程序开发-ExcelHome技术论坛 -42楼的正则表达式的时候,要求:搜索包含单词one和two的文本行。liu_aguang老师的表达式为:- ^(?=.*?\bone\b)(?=.*?\btwo\b).+$
复制代码 经测试,完全符合预期。我的测试代码:- Option Explicit
- Private Sub RegTest()
- Dim strTest$, strReg$, oMatches As Object, oMatch As Object, bFlag As Boolean, oReg As Object
- Set oReg = CreateObject("vbscript.regexp")
- strTest = "1 one and two" & vbCr _
- & "2 one and two" & vbLf _
- & "3 one and two" & vbCrLf _
- & "4 two one"
- strReg = "^(?=.*?\bone\b)(?=.*?\btwo\b).+$"
- With oReg
- .Global = True
- .MultiLine = True
- .Pattern = strReg
- Set oMatches = .Execute(strTest)
- MsgBox oMatches.Count
- End With
- For Each oMatch In oMatches
- MsgBox oMatch.Value
- Next
- End Sub
复制代码 有几点我想不明白:
1、测试结果中第1行不在结果中,是因为VbCr不能作为文本结束的边界?
2、表达式中最后的.+表示至少有1个,但第2行、3行、4行在two或one后面什么都没有,为什么都能匹配成功?
3、第4行的文本two在前,one在后,为什么还是可以匹配成功
请各位老师指教,谢谢。
|
|