You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
use lazy_static::lazy_static;use regex::Regex;fnmain(){lazy_static!{static ref FANCY_OPCODE_RE:Regex = Regex::new(r"(?x) ^ # Match start of string (?P<opname>[-a-zA-Z#+]+) # Match abbreviated name of OpCode as 'opname' \( # Open parentheses (?P<arg1>[0-9]+) # Match first number as 'arg1' (/ # Delimiter (?P<arg2>[0-9]+) # Optionally match second number as 'arg2' / # Delimiter (?P<arg3>[0-9]+))? # Optionally match third number as 'arg3' \) # Closing parenthesis $ # Match end of string ").unwrap();}let s = "+loop(3)";let opname:String;let arg1:String;let arg2:String;let arg3:String;matchFANCY_OPCODE_RE.captures(s){Some(cap) => {
opname = format!("{:?}", cap.name("opname"));
arg1 = format!("{:?}", cap.name("arg1"));
arg2 = format!("{:?}", cap.name("arg2"));
arg3 = format!("{:?}", cap.name("arg3"));},None => {
opname = "No match".to_string();
arg1 = String::new();
arg2 = String::new();
arg3 = String::new();}}println!("opname = {}, arg1 = {}, arg2 = {}, arg3 = {}", opname, arg1, arg2, arg3);}
Here's what the output looks like:
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Syntax(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
regex parse error:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1: (?x)
2: ^ # Match start of string
3: (?P<opname>[-a-zA-Z#+]+) # Match abbreviated name of OpCode as 'opname'
^^
4: \( # Open parentheses
5: (?P<arg1>[0-9]+) # Match first number as 'arg1'
6: (/ # Delimiter
7: (?P<arg2>[0-9]+) # Optionally match second number as 'arg2'
8: / # Delimiter
9: (?P<arg3>[0-9]+))? # Optionally match third number as 'arg3'
10: \) # Closing parenthesis
11: $ # Match end of string
12:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
error: unclosed character class
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
)', src/main.rs:17:12
The positioning of the ^^ in the error message looks off. I think there should be only one ^ and it should be under the opening [.
The text was updated successfully, but these errors were encountered:
This could be a "fun" one for someone to dig into. It's reasonably self-contained inside of regex-syntax, and shouldn't require any knowledge of regex engine internals.
Hello! I started taking a look at this, and I have to say that it's a pleasure to read the code. I am learning so much just by reading 👌🏻 .
I have a question. When reading the following doc comments I don't understand what is meant by "Similarly for -".
/// Parses the opening of a character class set. This includes the opening/// bracket along with `^` if present to indicate negation. This also/// starts parsing the opening set of unioned items if applicable, since/// there are special rules applied to certain characters in the opening/// of a character class. For example, `[^]]` is the class of all/// characters not equal to `]`. (`]` would need to be escaped in any other/// position.) Similarly for `-`.////// In all cases, the op inside the returned `ast::ClassBracketed` is an/// empty union. This empty union should be replaced with the actual item/// when it is popped from the parser's stack.////// This assumes the parser is positioned at the opening `[` and advances/// the parser to the first non-special byte of the character class.////// An error is returned if EOF is found.#[inline(never)]fn parse_set_class_open(
This section seems relevant to the issue, so I wanted it to be clear to me.
From: https://stackoverflow.com/questions/68228762/regex-wont-compile-because-of-unclosed-character-class-in-named-capture-group
Here's what the output looks like:
The positioning of the
^^
in the error message looks off. I think there should be only one^
and it should be under the opening[
.The text was updated successfully, but these errors were encountered: