-
Notifications
You must be signed in to change notification settings - Fork 481
Closed
Labels
Description
use lazy_static::lazy_static;
use regex::Regex;
fn main() {
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;
match FANCY_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 [
.