sql/
sql.rs

1use onig::*;
2
3fn main() {
4    let mut syntax = Syntax::default().clone();
5
6    syntax.set_operators(SyntaxOperator::SYNTAX_OPERATOR_VARIABLE_META_CHARACTERS);
7    syntax.set_behavior(SyntaxBehavior::empty());
8    syntax.set_options(RegexOptions::REGEX_OPTION_MULTILINE);
9
10    syntax.set_meta_char(MetaCharType::META_CHAR_ESCAPE, MetaChar::Character('\\'));
11    syntax.set_meta_char(MetaCharType::META_CHAR_ANYCHAR, MetaChar::Character('_'));
12    syntax.set_meta_char(MetaCharType::META_CHAR_ANYTIME, MetaChar::Ineffective);
13    syntax.set_meta_char(
14        MetaCharType::META_CHAR_ZERO_OR_ONE_TIME,
15        MetaChar::Ineffective,
16    );
17    syntax.set_meta_char(
18        MetaCharType::META_CHAR_ONE_OR_MORE_TIME,
19        MetaChar::Ineffective,
20    );
21    syntax.set_meta_char(
22        MetaCharType::META_CHAR_ANYCHAR_ANYTIME,
23        MetaChar::Character('%'),
24    );
25
26    let reg =
27        Regex::with_options("\\_%\\\\__zz", RegexOptions::REGEX_OPTION_NONE, &syntax).unwrap();
28
29    match reg.captures("a_abcabcabc\\ppzz") {
30        Some(caps) => {
31            println!("match at {}", caps.offset());
32            for (i, cap) in caps.iter_pos().enumerate() {
33                match cap {
34                    Some(pos) => println!("{}: {:?}", i, pos),
35                    None => println!("{}: did not capture", i),
36                }
37            }
38        }
39        None => println!("search fail"),
40    }
41}