diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2023-06-22 10:51:31 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2023-06-22 10:51:31 -0300 |
commit | 7d43b367e7a89369c1302124677a305aa0d070c7 (patch) | |
tree | cc0a05cc02a417b9107fa68a9506f7afef667dcb /re.html | |
parent | 4eb4419163dd6c97665b9481e9581ff32496b392 (diff) | |
download | lpeg-7d43b367e7a89369c1302124677a305aa0d070c7.tar.gz lpeg-7d43b367e7a89369c1302124677a305aa0d070c7.tar.bz2 lpeg-7d43b367e7a89369c1302124677a305aa0d070c7.zip |
Improved documentation for accumulator captures
Diffstat (limited to 're.html')
-rw-r--r-- | re.html | 38 |
1 files changed, 22 insertions, 16 deletions
@@ -61,6 +61,20 @@ Constructions are listed in order of decreasing precedence. | |||
61 | <table border="1"> | 61 | <table border="1"> |
62 | <tbody><tr><td><b>Syntax</b></td><td><b>Description</b></td></tr> | 62 | <tbody><tr><td><b>Syntax</b></td><td><b>Description</b></td></tr> |
63 | <tr><td><code>( p )</code></td> <td>grouping</td></tr> | 63 | <tr><td><code>( p )</code></td> <td>grouping</td></tr> |
64 | <tr><td><code>& p</code></td> <td>and predicate</td></tr> | ||
65 | <tr><td><code>! p</code></td> <td>not predicate</td></tr> | ||
66 | <tr><td><code>p1 p2</code></td> <td>concatenation</td></tr> | ||
67 | <tr><td><code>p1 / p2</code></td> <td>ordered choice</td></tr> | ||
68 | <tr><td><code>p ?</code></td> <td>optional match</td></tr> | ||
69 | <tr><td><code>p *</code></td> <td>zero or more repetitions</td></tr> | ||
70 | <tr><td><code>p +</code></td> <td>one or more repetitions</td></tr> | ||
71 | <tr><td><code>p^num</code></td> | ||
72 | <td>exactly <code>num</code> repetitions</td></tr> | ||
73 | <tr><td><code>p^+num</code></td> | ||
74 | <td>at least <code>num</code> repetitions</td></tr> | ||
75 | <tr><td><code>p^-num</code></td> | ||
76 | <td>at most <code>num</code> repetitions</td></tr> | ||
77 | <tr><td>(<code>name <- p</code>)<sup>+</sup></td> <td>grammar</td></tr> | ||
64 | <tr><td><code>'string'</code></td> <td>literal string</td></tr> | 78 | <tr><td><code>'string'</code></td> <td>literal string</td></tr> |
65 | <tr><td><code>"string"</code></td> <td>literal string</td></tr> | 79 | <tr><td><code>"string"</code></td> <td>literal string</td></tr> |
66 | <tr><td><code>[class]</code></td> <td>character class</td></tr> | 80 | <tr><td><code>[class]</code></td> <td>character class</td></tr> |
@@ -69,22 +83,15 @@ Constructions are listed in order of decreasing precedence. | |||
69 | <td>pattern <code>defs[name]</code> or a pre-defined pattern</td></tr> | 83 | <td>pattern <code>defs[name]</code> or a pre-defined pattern</td></tr> |
70 | <tr><td><code>name</code></td><td>non terminal</td></tr> | 84 | <tr><td><code>name</code></td><td>non terminal</td></tr> |
71 | <tr><td><code><name></code></td><td>non terminal</td></tr> | 85 | <tr><td><code><name></code></td><td>non terminal</td></tr> |
86 | |||
72 | <tr><td><code>{}</code></td> <td>position capture</td></tr> | 87 | <tr><td><code>{}</code></td> <td>position capture</td></tr> |
73 | <tr><td><code>{ p }</code></td> <td>simple capture</td></tr> | 88 | <tr><td><code>{ p }</code></td> <td>simple capture</td></tr> |
74 | <tr><td><code>{: p :}</code></td> <td>anonymous group capture</td></tr> | 89 | <tr><td><code>{: p :}</code></td> <td>anonymous group capture</td></tr> |
75 | <tr><td><code>{:name: p :}</code></td> <td>named group capture</td></tr> | 90 | <tr><td><code>{:name: p :}</code></td> <td>named group capture</td></tr> |
76 | <tr><td><code>{~ p ~}</code></td> <td>substitution capture</td></tr> | 91 | <tr><td><code>{~ p ~}</code></td> <td>substitution capture</td></tr> |
77 | <tr><td><code>{| p |}</code></td> <td>table capture</td></tr> | 92 | <tr><td><code>{| p |}</code></td> <td>table capture</td></tr> |
78 | <tr><td><code>=name</code></td> <td>back reference | 93 | <tr><td><code>=name</code></td> <td>back reference</td></tr> |
79 | </td></tr> | 94 | |
80 | <tr><td><code>p ?</code></td> <td>optional match</td></tr> | ||
81 | <tr><td><code>p *</code></td> <td>zero or more repetitions</td></tr> | ||
82 | <tr><td><code>p +</code></td> <td>one or more repetitions</td></tr> | ||
83 | <tr><td><code>p^num</code></td> <td>exactly <code>n</code> repetitions</td></tr> | ||
84 | <tr><td><code>p^+num</code></td> | ||
85 | <td>at least <code>n</code> repetitions</td></tr> | ||
86 | <tr><td><code>p^-num</code></td> | ||
87 | <td>at most <code>n</code> repetitions</td></tr> | ||
88 | <tr><td><code>p -> 'string'</code></td> <td>string capture</td></tr> | 95 | <tr><td><code>p -> 'string'</code></td> <td>string capture</td></tr> |
89 | <tr><td><code>p -> "string"</code></td> <td>string capture</td></tr> | 96 | <tr><td><code>p -> "string"</code></td> <td>string capture</td></tr> |
90 | <tr><td><code>p -> num</code></td> <td>numbered capture</td></tr> | 97 | <tr><td><code>p -> num</code></td> <td>numbered capture</td></tr> |
@@ -94,11 +101,8 @@ equivalent to <code>p / defs[name]</code></td></tr> | |||
94 | equivalent to <code>lpeg.Cmt(p, defs[name])</code></td></tr> | 101 | equivalent to <code>lpeg.Cmt(p, defs[name])</code></td></tr> |
95 | <tr><td><code>p ~> name</code></td> <td>fold capture | 102 | <tr><td><code>p ~> name</code></td> <td>fold capture |
96 | equivalent to <code>lpeg.Cf(p, defs[name])</code></td></tr> | 103 | equivalent to <code>lpeg.Cf(p, defs[name])</code></td></tr> |
97 | <tr><td><code>& p</code></td> <td>and predicate</td></tr> | 104 | <tr><td><code>p >> name</code></td> <td>accumulator capture |
98 | <tr><td><code>! p</code></td> <td>not predicate</td></tr> | 105 | equivalent to <code>(p % defs[name])</code></td></tr> |
99 | <tr><td><code>p1 p2</code></td> <td>concatenation</td></tr> | ||
100 | <tr><td><code>p1 / p2</code></td> <td>ordered choice</td></tr> | ||
101 | <tr><td>(<code>name <- p</code>)<sup>+</sup></td> <td>grammar</td></tr> | ||
102 | </tbody></table> | 106 | </tbody></table> |
103 | <p> | 107 | <p> |
104 | Any space appearing in a syntax description can be | 108 | Any space appearing in a syntax description can be |
@@ -199,9 +203,10 @@ print(re.match("the number 423 is odd", "({%a+} / .)*")) | |||
199 | --> the number is odd | 203 | --> the number is odd |
200 | 204 | ||
201 | -- returns the first numeral in a string | 205 | -- returns the first numeral in a string |
202 | print(re.match("the number 423 is odd", "s <- {%d+} / . s")) | 206 | print(re.match("the number 423 is odd", "s <- {%d+} / . s")) |
203 | --> 423 | 207 | --> 423 |
204 | 208 | ||
209 | -- substitutes a dot for each vowel in a string | ||
205 | print(re.gsub("hello World", "[aeiou]", ".")) | 210 | print(re.gsub("hello World", "[aeiou]", ".")) |
206 | --> h.ll. W.rld | 211 | --> h.ll. W.rld |
207 | </pre> | 212 | </pre> |
@@ -415,6 +420,7 @@ prefix <- '&' S prefix / '!' S prefix / suffix | |||
415 | suffix <- primary S (([+*?] | 420 | suffix <- primary S (([+*?] |
416 | / '^' [+-]? num | 421 | / '^' [+-]? num |
417 | / '->' S (string / '{}' / name) | 422 | / '->' S (string / '{}' / name) |
423 | / '>>' S name | ||
418 | / '=>' S name) S)* | 424 | / '=>' S name) S)* |
419 | 425 | ||
420 | primary <- '(' exp ')' / string / class / defined | 426 | primary <- '(' exp ')' / string / class / defined |