use regex::Regex; fn main() { let text = "CREATE TABLE users ( id integer, name text, age integer, );"; println!("{}", text); let table_re = Regex::new(r"(?i)create\s+table\s+([a-zA-Z_][a-zA-Z0-9_]*)\s*\((?s)(.*?)\)").unwrap(); if let Some(caps) = table_re.captures(text) { let table_name = &caps[1]; let columns_str = &caps[2]; println!("table name: {}", table_name); let column_re = Regex::new(r"(?i)([a-zA-Z_][a-zA-Z0-9_]*)\s+([a-zA-Z0-9()]+)").unwrap(); for line in columns_str.lines() { if let Some(col_caps) = column_re.captures(line.trim()) { let column_name = &col_caps[1]; let column_type = &col_caps[2]; println!(" column name: {}, type: {}", column_name, column_type); } } } else { println!("CREATE TABLE 文ではありません"); } }
CREATE TABLE users (
id integer,
name text,
age integer,
);
table name: users
column name: id, type: integer
column name: name, type: text
column name: age, type: integer
これにprimary keyなどのconstrainも追加したい…