Skip to content

Commit b9dc5c2

Browse files
author
梶塚太智
committed
正規表現の機能を追加
1 parent 5847e96 commit b9dc5c2

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

src/main.rs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use opener;
22
use rand::seq::SliceRandom;
3+
use regex::Regex;
34
use std::collections::HashMap;
45
use std::env;
56
use std::fs::{self, File};
@@ -514,6 +515,36 @@ impl Executor {
514515
self.stack.push(Type::Bool(text.contains(&word)))
515516
}
516517

518+
// 正規表現で検索
519+
"regex" => {
520+
let pt = self.pop_stack().get_string();
521+
let patern: Regex;
522+
match Regex::new(pt.as_str()) {
523+
Ok(i) => patern = i,
524+
Err(_) => {
525+
self.log_print("エラー! 正規表現が不正です\n".to_string());
526+
return;
527+
}
528+
}
529+
530+
let text = self.pop_stack().get_string();
531+
532+
let value;
533+
match patern.captures(text.as_str()) {
534+
Some(i) => value = i,
535+
None => {
536+
self.stack.push(Type::List(vec![]));
537+
return;
538+
}
539+
}
540+
541+
let mut list: Vec<Type> = Vec::new();
542+
for i in 0..value.len() - 1 {
543+
list.push(Type::String(value.at(i).unwrap_or("").to_string()))
544+
}
545+
self.stack.push(Type::List(list));
546+
}
547+
517548
// 入出力コマンド
518549

519550
// ファイル書き込み

0 commit comments

Comments
 (0)