本工具底层使用 crates.io/crates/regex, 是 Rust 最常用的正则表达式库,具有高性能、线性时间复杂度、Unicode 支持完善、不支持回溯、默认避免灾难性回溯(ReDoS)、API 简洁、线程安全等特点。
在页面中输入的正则会由 rust regex 真实的编译运行,并且可以观察对应方法(find、find_all、captures、split、test)的执行结果,以方便开发。
[dependencies]
regex = "1"
use regex::Regex;
fn main() {
let re = Regex::new(r"\d+").unwrap();
if let Some(m) = re.find("abc123xyz") {
println!("{}", m.as_str());
println!("{}", m.start());
println!("{}", m.end());
}
}输出:
123
3
6
| Flag | 说明 | 示例 |
|---|---|---|
i | 忽略大小写 | (?i)abc |
m | 多行模式,^ 和 $ 匹配每行 | (?m)^abc$ |
s | 允许 . 匹配换行 | (?s)a.*b |
x | 忽略空白并允许注释 | (?x)a \s+ b |
U | 交换贪婪/非贪婪模式 | (?U)a.*b |
u | 启用 Unicode(默认开启) | (?u)\w+ |
| 表达式 | 说明 | 示例 |
|---|---|---|
. | 匹配任意字符(默认不包含换行) | a.c |
\d | 匹配数字 | \d+ |
\D | 匹配非数字 | \D+ |
\w | 匹配单词字符(Unicode) | \w+ |
\W | 匹配非单词字符 | \W+ |
\s | 匹配空白字符 | \s+ |
\S | 匹配非空白字符 | \S+ |
^ | 匹配字符串开始 | ^abc |
$ | 匹配字符串结束 | abc$ |
* | 匹配前一个表达式 0 次或多次 | a* |
+ | 匹配前一个表达式 1 次或多次 | a+ |
? | 匹配前一个表达式 0 次或 1 次 | colou?r |
{n} | 匹配前一个表达式 n 次 | \d{4} |
{n,m} | 匹配前一个表达式 n 到 m 次 | \d{2,6} |
[abc] | 字符集合,匹配其中任意字符 | [abc]+ |
[^abc] | 排除字符集合 | [^0-9] |
(abc) | 捕获组 | (\d+) |
(?:abc) | 非捕获组 | (?:abc)+ |
(?P<name>abc) | 命名捕获组 | (?P<id>\d+) |
a|b | 或运算 | cat|dog |
\b | 单词边界 | \bword\b |
\B | 非单词边界 | \Bing\B |
\A | 匹配文本开始 | \Aabc |
\z | 匹配文本结束 | abc\z |
\p{Han} | Unicode 字符分类 | \p{Han}+ |