getGroup: Difference between revisions
No edit summary |
No edit summary |
||
Line 45: | Line 45: | ||
So {{code|\\S}} means grab the first none-whitespace you encounter, {{code|\\S+}} means grap the first none-whitespace you encounter AND ALL characters after that until you encounter a whitespace. | So {{code|\\S}} means grab the first none-whitespace you encounter, {{code|\\S+}} means grap the first none-whitespace you encounter AND ALL characters after that until you encounter a whitespace. | ||
So the regex statement looks for ''(word)(whitespace)(word)(0 or more whitespace)'', where every 'parenthesized part' is a group. This will deliver 2 matches: {{code|"this is"}} and {{code|"a test"}}. The first match is match 1, the second match 2. | So the regex statement looks for ''(word)(whitespace)(word)(0 or more whitespace)'', where every 'parenthesized part' is a group. This will deliver 2 matches: {{code|"this is"}} and {{code|"a test"}}. The first match is match 1, the second match 2. Where each match again consists out of 5 groups: 4 sets of parenthesis resulting in group1,2,3 & 4 and group0 returning the entire matched string. | ||
Within one match there are 1 or more groups: | Within one match there are 1 or more groups: |
Revision as of 07:51, 1 July 2013
getGroup() Function
Usage
getGroup(id, match, group)
Where
id
- is the id returned by strfind()match
- is the number of the match found by strfind()group
- is the number of the capture group found by strfind()
Example
[h: id = strfind("this is a test", "(\\S+)\\s(\\S+)\\s*")]
match 1, group 0 = [getGroup(id, 1, 0)]<br>
match 1, group 1 = [getGroup(id, 1, 1)]<br>
match 1, group 2 = [getGroup(id, 1, 2)]<br>
match 2, group 0 = [getGroup(id, 2, 0)]<br>
match 2, group 1 = [getGroup(id, 2, 1)]<br>
match 2, group 2 = [getGroup(id, 2, 2)]<br>
Returns:
match 1, group 0 = this is match 1, group 1 = this match 1, group 2 = is match 2, group 0 = a test match 2, group 1 = a match 2, group 2 = test
Example explained
First off, normally you only need one \
in a regex statement, but because MT uses regex itself and the statement is preparsed you need to double escape it, so \\
.
S
= 'everything that is NOT a whitespace's
= 'whitespace'+
= '1 or more'*
= '0 or more'
Have a look here for an overview.
Second important thing to know is that a 'group' is defined by '('parenthesis')': "(group1)(group2)(etc.)", where group0 returns the entire search result.
So \\S
means grab the first none-whitespace you encounter, \\S+
means grap the first none-whitespace you encounter AND ALL characters after that until you encounter a whitespace.
So the regex statement looks for (word)(whitespace)(word)(0 or more whitespace), where every 'parenthesized part' is a group. This will deliver 2 matches: "this is"
and "a test"
. The first match is match 1, the second match 2. Where each match again consists out of 5 groups: 4 sets of parenthesis resulting in group1,2,3 & 4 and group0 returning the entire matched string.
Within one match there are 1 or more groups:
- The first group
'0'
returns the ENTIRE match. - Every group after that will return partial matches that are within
()
.
So group '1'
will return the first (\\S)
part and group '2'
will return the second (\\S)
of the regex statement. These are respectively (for the first match): "this"
and "is"
.
\
while in MT you need \\
.