aboutsummaryrefslogtreecommitdiff
path: root/re.html
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2023-06-22 10:51:31 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2023-06-22 10:51:31 -0300
commit7d43b367e7a89369c1302124677a305aa0d070c7 (patch)
treecc0a05cc02a417b9107fa68a9506f7afef667dcb /re.html
parent4eb4419163dd6c97665b9481e9581ff32496b392 (diff)
downloadlpeg-7d43b367e7a89369c1302124677a305aa0d070c7.tar.gz
lpeg-7d43b367e7a89369c1302124677a305aa0d070c7.tar.bz2
lpeg-7d43b367e7a89369c1302124677a305aa0d070c7.zip
Improved documentation for accumulator captures
Diffstat (limited to 're.html')
-rw-r--r--re.html38
1 files changed, 22 insertions, 16 deletions
diff --git a/re.html b/re.html
index ed4ccb1..114d968 100644
--- a/re.html
+++ b/re.html
@@ -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>&amp; 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 &lt;- 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>&lt;name&gt;</code></td><td>non terminal</td></tr> 85<tr><td><code>&lt;name&gt;</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 -&gt; 'string'</code></td> <td>string capture</td></tr> 95<tr><td><code>p -&gt; 'string'</code></td> <td>string capture</td></tr>
89<tr><td><code>p -&gt; "string"</code></td> <td>string capture</td></tr> 96<tr><td><code>p -&gt; "string"</code></td> <td>string capture</td></tr>
90<tr><td><code>p -&gt; num</code></td> <td>numbered capture</td></tr> 97<tr><td><code>p -&gt; num</code></td> <td>numbered capture</td></tr>
@@ -94,11 +101,8 @@ equivalent to <code>p / defs[name]</code></td></tr>
94equivalent to <code>lpeg.Cmt(p, defs[name])</code></td></tr> 101equivalent to <code>lpeg.Cmt(p, defs[name])</code></td></tr>
95<tr><td><code>p ~&gt; name</code></td> <td>fold capture 102<tr><td><code>p ~&gt; name</code></td> <td>fold capture
96equivalent to <code>lpeg.Cf(p, defs[name])</code></td></tr> 103equivalent to <code>lpeg.Cf(p, defs[name])</code></td></tr>
97<tr><td><code>&amp; p</code></td> <td>and predicate</td></tr> 104<tr><td><code>p &gt;&gt; name</code></td> <td>accumulator capture
98<tr><td><code>! p</code></td> <td>not predicate</td></tr> 105equivalent 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 &lt;- p</code>)<sup>+</sup></td> <td>grammar</td></tr>
102</tbody></table> 106</tbody></table>
103<p> 107<p>
104Any space appearing in a syntax description can be 108Any space appearing in a syntax description can be
@@ -199,9 +203,10 @@ print(re.match("the number 423 is odd", "({%a+} / .)*"))
199--&gt; the number is odd 203--&gt; the number is odd
200 204
201-- returns the first numeral in a string 205-- returns the first numeral in a string
202print(re.match("the number 423 is odd", "s <- {%d+} / . s")) 206print(re.match("the number 423 is odd", "s &lt;- {%d+} / . s"))
203--&gt; 423 207--&gt; 423
204 208
209-- substitutes a dot for each vowel in a string
205print(re.gsub("hello World", "[aeiou]", ".")) 210print(re.gsub("hello World", "[aeiou]", "."))
206--&gt; h.ll. W.rld 211--&gt; h.ll. W.rld
207</pre> 212</pre>
@@ -415,6 +420,7 @@ prefix &lt;- '&amp;' S prefix / '!' S prefix / suffix
415suffix &lt;- primary S (([+*?] 420suffix &lt;- primary S (([+*?]
416 / '^' [+-]? num 421 / '^' [+-]? num
417 / '-&gt;' S (string / '{}' / name) 422 / '-&gt;' S (string / '{}' / name)
423 / '&gt&gt;' S name
418 / '=&gt;' S name) S)* 424 / '=&gt;' S name) S)*
419 425
420primary &lt;- '(' exp ')' / string / class / defined 426primary &lt;- '(' exp ')' / string / class / defined