pub struct Syntax { /* private fields */ }
Expand description
Onig Syntax Wrapper
Each syntax dfines a flavour of regex syntax. This type allows
interaction with the built-in syntaxes through the static accessor
functions (Syntax::emacs()
, Syntax::default()
etc.) and the
creation of custom syntaxes.
For a demonstration of creating a custom syntax see
examples/syntax.rs
in the main onig crate.
Implementations§
Source§impl Syntax
impl Syntax
Sourcepub fn asis() -> &'static Syntax
pub fn asis() -> &'static Syntax
Plain text syntax
Examples found in repository?
20fn main() {
21 exec(
22 Syntax::perl(),
23 r"\p{XDigit}\P{XDigit}\p{^XDigit}\P{^XDigit}\p{XDigit}",
24 "bgh3a",
25 );
26
27 exec(Syntax::java(), r"\p{XDigit}\P{XDigit}[a-c&&b-g]", "bgc");
28
29 exec(
30 Syntax::asis(),
31 r"abc def* e+ g?ddd[a-rvvv] (vv){3,7}hv\dvv(?:aczui ss)\W\w$",
32 r"abc def* e+ g?ddd[a-rvvv] (vv){3,7}hv\dvv(?:aczui ss)\W\w$",
33 );
34}
Sourcepub fn posix_basic() -> &'static Syntax
pub fn posix_basic() -> &'static Syntax
POSIX Basic RE syntax
Sourcepub fn posix_extended() -> &'static Syntax
pub fn posix_extended() -> &'static Syntax
POSIX Extended RE syntax
Sourcepub fn emacs() -> &'static Syntax
pub fn emacs() -> &'static Syntax
Emacs syntax
Examples found in repository?
7fn main() {
8 let mut regexes = HashMap::new();
9 for arg in env::args().skip(1) {
10 println!("Compiling '{}'", arg);
11 let regex_compilation = Regex::with_options(
12 &arg,
13 onig::RegexOptions::REGEX_OPTION_SINGLELINE,
14 onig::Syntax::emacs(),
15 );
16 match regex_compilation {
17 Ok(regex) => {
18 regexes.insert(arg, regex);
19 }
20 Err(error) => {
21 panic!("{:?}", error);
22 }
23 }
24 }
25
26 let stdin = io::stdin();
27 for line in stdin.lock().lines() {
28 if let Ok(line) = line {
29 for (name, regex) in regexes.iter() {
30 let res = regex.search_with_options(
31 &line,
32 0,
33 line.len(),
34 onig::SearchOptions::SEARCH_OPTION_NONE,
35 None,
36 );
37 match res {
38 Some(pos) => println!("{} => matched @ {}", name, pos),
39 None => println!("{} => did not match", name),
40 }
41 }
42 }
43 }
44 println!("done");
45}
Sourcepub fn java() -> &'static Syntax
pub fn java() -> &'static Syntax
Java (Sun java.util.regex) syntax
Examples found in repository?
20fn main() {
21 exec(
22 Syntax::perl(),
23 r"\p{XDigit}\P{XDigit}\p{^XDigit}\P{^XDigit}\p{XDigit}",
24 "bgh3a",
25 );
26
27 exec(Syntax::java(), r"\p{XDigit}\P{XDigit}[a-c&&b-g]", "bgc");
28
29 exec(
30 Syntax::asis(),
31 r"abc def* e+ g?ddd[a-rvvv] (vv){3,7}hv\dvv(?:aczui ss)\W\w$",
32 r"abc def* e+ g?ddd[a-rvvv] (vv){3,7}hv\dvv(?:aczui ss)\W\w$",
33 );
34}
Sourcepub fn perl() -> &'static Syntax
pub fn perl() -> &'static Syntax
Perl syntax
Examples found in repository?
20fn main() {
21 exec(
22 Syntax::perl(),
23 r"\p{XDigit}\P{XDigit}\p{^XDigit}\P{^XDigit}\p{XDigit}",
24 "bgh3a",
25 );
26
27 exec(Syntax::java(), r"\p{XDigit}\P{XDigit}[a-c&&b-g]", "bgc");
28
29 exec(
30 Syntax::asis(),
31 r"abc def* e+ g?ddd[a-rvvv] (vv){3,7}hv\dvv(?:aczui ss)\W\w$",
32 r"abc def* e+ g?ddd[a-rvvv] (vv){3,7}hv\dvv(?:aczui ss)\W\w$",
33 );
34}
Sourcepub fn default() -> &'static Syntax
pub fn default() -> &'static Syntax
Default syntax (Ruby syntax)
Examples found in repository?
35fn main() {
36 let mut syn = Syntax::default().clone();
37 syn.enable_operators(SyntaxOperator::SYNTAX_OPERATOR_ATMARK_CAPTURE_HISTORY);
38
39 ex(
40 "((())())",
41 "\\g<p>(?@<p>\\(\\g<s>\\)){0}(?@<s>(?:\\g<p>)*|){0}",
42 &syn,
43 );
44 ex("x00x00x00", "(?@x(?@\\d+))+", &syn);
45 ex("0123", "(?@.)(?@.)(?@.)(?@.)", &syn);
46}
More examples
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}
Sourcepub fn operators(&self) -> SyntaxOperator
pub fn operators(&self) -> SyntaxOperator
Retrieve the operators for this syntax
Sourcepub fn set_operators(&mut self, operators: SyntaxOperator)
pub fn set_operators(&mut self, operators: SyntaxOperator)
Replace the operators for this syntax
Examples found in repository?
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}
Sourcepub fn enable_operators(&mut self, operators: SyntaxOperator)
pub fn enable_operators(&mut self, operators: SyntaxOperator)
Enable Operators for this Syntax
Updates the operators for this syntax to enable the chosen ones.
Examples found in repository?
35fn main() {
36 let mut syn = Syntax::default().clone();
37 syn.enable_operators(SyntaxOperator::SYNTAX_OPERATOR_ATMARK_CAPTURE_HISTORY);
38
39 ex(
40 "((())())",
41 "\\g<p>(?@<p>\\(\\g<s>\\)){0}(?@<s>(?:\\g<p>)*|){0}",
42 &syn,
43 );
44 ex("x00x00x00", "(?@x(?@\\d+))+", &syn);
45 ex("0123", "(?@.)(?@.)(?@.)(?@.)", &syn);
46}
Sourcepub fn disable_operators(&mut self, operators: SyntaxOperator)
pub fn disable_operators(&mut self, operators: SyntaxOperator)
Disable Operators for this Syntax
Updates the operators for this syntax to remove the specified operators.
Sourcepub fn behavior(&self) -> SyntaxBehavior
pub fn behavior(&self) -> SyntaxBehavior
Retrieves the syntax behaviours
Sourcepub fn set_behavior(&mut self, behavior: SyntaxBehavior)
pub fn set_behavior(&mut self, behavior: SyntaxBehavior)
Overwrite the syntax behaviour for this syntax.
Examples found in repository?
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}
Sourcepub fn enable_behavior(&mut self, behavior: SyntaxBehavior)
pub fn enable_behavior(&mut self, behavior: SyntaxBehavior)
Enable a given behaviour for this syntax
Sourcepub fn disable_behavior(&mut self, behavior: SyntaxBehavior)
pub fn disable_behavior(&mut self, behavior: SyntaxBehavior)
Disable a given behaviour for this syntax
Sourcepub fn options(&self) -> RegexOptions
pub fn options(&self) -> RegexOptions
Retireve the syntax options for this syntax
Sourcepub fn set_options(&mut self, options: RegexOptions)
pub fn set_options(&mut self, options: RegexOptions)
Replace the syntax options for this syntax
Examples found in repository?
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}
Sourcepub fn set_meta_char(&mut self, what: MetaCharType, meta: MetaChar)
pub fn set_meta_char(&mut self, what: MetaCharType, meta: MetaChar)
Set a given meta character’s state
Arguments:
what
: The meta character to updatemeta
: The value to set the meta character to
Examples found in repository?
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}