2021-09-22 23:51:34 -07:00
|
|
|
# Lua Bindings
|
|
|
|
|
2021-09-25 00:01:33 -07:00
|
|
|
This directory contains Lua bindings for bp. The bindings are intended to be
|
|
|
|
roughly equivalent in usefulness to LPEG, but with a smaller codebase (roughly
|
|
|
|
3/4 the size, as of this writing).
|
2021-09-22 23:51:34 -07:00
|
|
|
|
|
|
|
## API
|
|
|
|
|
2021-09-25 00:20:21 -07:00
|
|
|
The Lua `bp` bindings provide the following methods:
|
|
|
|
|
|
|
|
```lua
|
|
|
|
bp.match(text, pattern, [start_index]) --> match, match_start, match_length / nil
|
|
|
|
bp.replace(text, pattern, replacement, [start_index]) --> text_with_replacements, num_replacements
|
|
|
|
```
|
|
|
|
|
|
|
|
Match objects returned by `bp.match()` are tables whose `__tostring` will
|
|
|
|
return the text of the match. Additionally, match objects store the text of the
|
|
|
|
match at index `0`, and any captures stored as match objects with a key
|
|
|
|
corresponding to the capture's identifier (e.g. `@"a" @foo="bc"` will be
|
|
|
|
encoded as `{[0]="abc", [1]="a", foo={[0]="bc"}}`. If multiple captures within
|
|
|
|
a match share the same identifier, it is unspecified which captured match will
|
|
|
|
be stored at that key, so it's best to be unambiguous.
|
|
|
|
|
|
|
|
All methods will raise an error with a descriptive message if the given pattern
|
|
|
|
has a syntax error.
|
|
|
|
|
|
|
|
## Example Usage
|
|
|
|
|
2021-09-22 23:51:34 -07:00
|
|
|
```lua
|
|
|
|
local bp = require("bp")
|
2021-09-24 22:57:39 -07:00
|
|
|
local m, i, len = bp.match("like finding a needle in a haystack", '"n" @Es=+`e "dle"')
|
2021-09-25 00:20:21 -07:00
|
|
|
--> {[0]="needle", Es={[0]="ee"}}, 16, 6
|
2021-09-24 22:57:39 -07:00
|
|
|
--> tostring(m) == "needle", tostring(m.Es) == "ee"
|
2021-09-25 00:20:21 -07:00
|
|
|
local replaced, nreplacements = bp.match("like finding a needle in a haystack", '"n" +`e "dle"', "cat")
|
|
|
|
--> "like finding a cat in a haystack", 1
|
2021-09-22 23:51:34 -07:00
|
|
|
```
|