2 ' Copyright 2013 Piotr Caban for CodeWeavers
4 ' This library is free software; you can redistribute it and/or
5 ' modify it under the terms of the GNU Lesser General Public
6 ' License as published by the Free Software Foundation; either
7 ' version 2.1 of the License, or (at your option) any later version.
9 ' This library is distributed in the hope that it will be useful,
10 ' but WITHOUT ANY WARRANTY; without even the implied warranty of
11 ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 ' Lesser General Public License for more details.
14 ' You should have received a copy of the GNU Lesser General Public
15 ' License along with this library; if not, write to the Free Software
16 ' Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 Dim x
, matches
, match
, submatch
23 Set x
= CreateObject("vbscript.regexp")
24 Call ok(getVT(x
.Pattern
) = "VT_BSTR", "getVT(RegExp.Pattern) = " & getVT(x
.Pattern
))
25 Call ok(x
.Pattern
= "", "RegExp.Pattern = " & x
.Pattern
)
26 Call ok(getVT(x
.IgnoreCase
) = "VT_BOOL", "getVT(RegExp.IgnoreCase) = " & getVT(x
.IgnoreCase
))
27 Call ok(x
.IgnoreCase
= false, "RegExp.IgnoreCase = " & x
.IgnoreCase
)
28 Call ok(getVT(x
.Global) = "VT_BOOL", "getVT(RegExp.Global) = " & getVT(x
.Global))
29 Call ok(x
.Global = false, "RegExp.Global = " & x
.Global)
30 Call ok(getVT(x
.Multiline
) = "VT_BOOL", "getVT(RegExp.Multiline) = " & getVT(x
.Multiline
))
31 Call ok(x
.Multiline
= false, "RegExp.Multiline = " & x
.Multiline
)
34 matches
= x
.Test(" aabaaa")
35 Call ok(matches
= true, "RegExp.Test returned: " & matches
)
36 Set matches
= x
.Execute(" aabaaa")
37 Call ok(getVT(matches
.Count
) = "VT_I4", "getVT(matches.Count) = " & getVT(matches
.Count
))
38 Call ok(matches
.Count
= 1, "matches.Count = " & matches
.Count
)
39 Set match
= matches
.Item(0)
40 Call ok(match
.Value
= "aa", "match.Value = " & match
.Value
)
41 Call ok(match
.FirstIndex
= 1, "match.FirstIndex = " & match
.FirstIndex
)
42 Call ok(match
.Length
= 2, "match.Length = " & match
.Length
)
43 Set submatch
= match
.SubMatches
44 Call ok(submatch
.Count
= 0, "submatch.Count = " & submatch
.Count
)
47 Set matches
= x
.Execute(" aabaaa")
48 Call ok(matches
.Count
= 2, "matches.Count = " & matches
.Count
)
49 Set match
= matches
.Item(0)
50 Call ok(match
.Value
= "aa", "match.Value = " & match
.Value
)
51 Call ok(match
.FirstIndex
= 1, "match.FirstIndex = " & match
.FirstIndex
)
52 Call ok(match
.Length
= 2, "match.Length = " & match
.Length
)
53 Set submatch
= match
.SubMatches
54 Call ok(submatch
.Count
= 0, "submatch.Count = " & submatch
.Count
)
55 Set match
= matches
.Item(1)
56 Call ok(match
.Value
= "aaa", "match.Value = " & match
.Value
)
57 Call ok(match
.FirstIndex
= 4, "match.FirstIndex = " & match
.FirstIndex
)
58 Call ok(match
.Length
= 3, "match.Length = " & match
.Length
)
59 Set submatch
= match
.SubMatches
60 Call ok(submatch
.Count
= 0, "submatch.Count = " & submatch
.Count
)
62 Set matches
= x
.Execute(" aabaaa")
63 Call ok(matches
.Count
= 2, "matches.Count = " & matches
.Count
)
64 Set match
= matches
.Item(0)
65 Call ok(match
.Value
= "aa", "match.Value = " & match
.Value
)
66 Call ok(match
.FirstIndex
= 1, "match.FirstIndex = " & match
.FirstIndex
)
67 Call ok(match
.Length
= 2, "match.Length = " & match
.Length
)
68 Set submatch
= match
.SubMatches
69 Call ok(submatch
.Count
= 0, "submatch.Count = " & submatch
.Count
)
71 x
.Pattern
= "^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$"
73 Set matches = x.Execute("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
")
74 Call ok(matches.Count = 0, "matches
.Count
= " & matches.Count)
75 Set submatch = match.SubMatches
76 Call ok(submatch.Count = 0, "submatch
.Count
= " & submatch.Count)
78 x.Pattern = "(a|b
)+|
(c
)"
79 Set matches = x.Execute("aa
")
80 Call ok(matches.Count = 1, "matches
.Count
= " & matches.Count)
81 Set match = matches.Item(0)
82 Call ok(match.Value = "aa
", "match
.Value
= " & match.Value)
83 Call ok(match.FirstIndex = 0, "match
.FirstIndex
= " & match.FirstIndex)
84 Call ok(match.Length = 2, "match
.Length
= " & match.Length)
85 Set submatch = match.SubMatches
86 Call ok(submatch.Count = 2, "submatch
.Count
= " & submatch.Count)
87 Call ok(getVT(submatch.Item(0)) = "VT_BSTR
", "getVT(submatch
.Item(0)) = " & getVT(submatch.Item(0)))
88 Call ok(submatch.Item(0) = "a
", "submatch
.Item(0) = " & submatch.Item(0))
89 Call ok(getVT(submatch.Item(1)) = "VT_EMPTY
", "getVT(submatch
.Item(1)) = " & getVT(submatch.Item(1)))
90 Call ok(submatch.Item(1) = "", "submatch
.Item(0) = " & submatch.Item(1))
92 matches = x.Test(" a
")
93 Call ok(matches = true, "RegExp
.Test returned
: " & matches)
94 matches = x.Test(" a
")
95 Call ok(matches = true, "RegExp
.Test returned
: " & matches)
97 x.Pattern = "\
[([^\
[]+)\
]"
99 Set matches = x.Execute(" [test
] ")
100 Call ok(matches.Count = 1, "matches
.Count
= " & matches.Count)
101 Set match = matches.Item(0)
102 Call ok(match.Value = "[test
]", "match
.Value
= " & match.Value)
103 Call ok(match.FirstIndex = 1, "match
.FirstIndex
= " & match.FirstIndex)
104 Call ok(match.Length = 6, "match
.Length
= " & match.Length)
105 Set submatch = match.SubMatches
106 Call ok(submatch.Count = 1, "submatch
.Count
= " & submatch.Count)
107 Call ok(submatch.Item(0) = "test
", "submatch
.Item(0) = " & submatch.Item(0))
111 Set matches = x.Execute("abcaBc
")
112 Call ok(matches.Count = 2, "matches
.Count
= " & matches.Count)
113 Set match = matches.Item(0)
114 Call ok(match.Value = "ab
", "match
.Value
= " & match.Value)
115 Call ok(match.FirstIndex = 0, "match
.FirstIndex
= " & match.FirstIndex)
116 Call ok(match.Length = 2, "match
.Length
= " & match.Length)
117 Set submatch = match.SubMatches
118 Call ok(submatch.Count = 0, "submatch
.Count
= " & submatch.Count)
119 Set match = matches.Item(1)
120 Call ok(match.Value = "aB
", "match
.Value
= " & match.Value)
121 Call ok(match.FirstIndex = 3, "match
.FirstIndex
= " & match.FirstIndex)
122 Call ok(match.Length = 2, "match
.Length
= " & match.Length)
123 Set submatch = match.SubMatches
124 Call ok(submatch.Count = 0, "submatch
.Count
= " & submatch.Count)
128 Set matches = x.Execute("aaabcabc
")
129 Call ok(matches.Count = 2, "matches
.Count
= " & matches.Count)
130 Set match = matches.Item(0)
131 Call ok(match.Value = "aaab
", "match
.Value
= " & match.Value)
132 Call ok(match.FirstIndex = 0, "match
.FirstIndex
= " & match.FirstIndex)
133 Call ok(match.Length = 4, "match
.Length
= " & match.Length)
134 Set submatch = match.SubMatches
135 Call ok(submatch.Count = 0, "submatch
.Count
= " & submatch.Count)
136 Set match = matches.Item(1)
137 Call ok(match.Value = "ab
", "match
.Value
= " & match.Value)
138 Call ok(match.FirstIndex = 5, "match
.FirstIndex
= " & match.FirstIndex)
139 Call ok(match.Length = 2, "match
.Length
= " & match.Length)
140 Set submatch = match.SubMatches
141 Call ok(submatch.Count = 0, "submatch
.Count
= " & submatch.Count)
144 Set matches = x.Execute("aaa\\cabc
")
145 Call ok(matches.Count = 2, "matches
.Count
= " & matches.Count)
146 Set match = matches.Item(0)
147 Call ok(match.Value = "\
", "match
.Value
= " & match.Value)
148 Call ok(match.FirstIndex = 3, "match
.FirstIndex
= " & match.FirstIndex)
149 Call ok(match.Length = 1, "match
.Length
= " & match.Length)
150 Set submatch = match.SubMatches
151 Call ok(submatch.Count = 0, "submatch
.Count
= " & submatch.Count)
152 Set match = matches.Item(1)
153 Call ok(match.Value = "\
", "match
.Value
= " & match.Value)
154 Call ok(match.FirstIndex = 4, "match
.FirstIndex
= " & match.FirstIndex)
155 Call ok(match.Length = 1, "match
.Length
= " & match.Length)
156 Set submatch = match.SubMatches
157 Call ok(submatch.Count = 0, "submatch
.Count
= " & submatch.Count)
159 x.Pattern = "(a
)(b
)cabc
"
160 Set matches = x.Execute("abcabc
")
161 Call ok(matches.Count = 1, "matches
.Count
= " & matches.Count)
162 Set match = matches.Item(0)
163 Call ok(match.Value = "abcabc
", "match
.Value
= " & match.Value)
164 Call ok(match.FirstIndex = 0, "match
.FirstIndex
= " & match.FirstIndex)
165 Call ok(match.Length = 6, "match
.Length
= " & match.Length)
166 Set submatch = match.SubMatches
167 Call ok(submatch.Count = 2, "submatch
.Count
= " & submatch.Count)
168 Call ok(submatch.Item(0) = "a
", "submatch
.Item(0) = " & submatch.Item(0))
169 Call ok(submatch.Item(1) = "b
", "submatch
.Item(0) = " & submatch.Item(1))