2个版本
0.1.1 | 2022年11月4日 |
---|---|
0.1.0 | 2022年11月4日 |
#1405 在 文本处理
16KB
220 行
🎉 简单正则表达式解析复杂标签 🎉
这个存储库导出一个 单个 字符串常量,可以安全地与 regex::Regex::new()
一起使用。它受到了 hashtag-regex 的极大启发。这个正则表达式应该匹配任何有效的标签。如果您认为这不是一个案例,请提交一个错误。 :)
let hashtag_re = Regex::new(&hashtag_regex::HASHTAG_RE_STRING).unwrap();
let text = "Hello #🌍, wassup? Check out this #hashtag magic!";
let all_captures: Vec<regex::Captures> = hashtag_re.captures_iter(text).collect();
// [
// Captures({0: Some(" #🌍"), 1: Some(" "), "hashtag": Some("#🌍"), "hash": Some("#"), "tag": Some("🌍")}),
// Captures({0: Some(" #hashtag"), 1: Some(" "), "hashtag": Some("#hashtag"), "hash": Some("#"), "tag": Some("hashtag")})
// ]
在我尝试构建一个匹配所有标签(包括包含非ascii字符和特别是emoji的标签)的正则表达式之后,这个存储库诞生了。 hashtag-regex
正好做到了这一点,但不是在我的首选语言中 😊 所以我决定做同样的事情,并找到了 emojic
,它似乎提供了我需要的东西。我从该存储库中的所有emoji构建了一个简单的正则表达式,并很快遇到了问题。在 emojic问题跟踪器上的对话 中,@Cryptjar 非常友好,并指出了做这件事的一些陷阱,这帮助我取得了进展。但我花了相当多的时间不理解为什么我的正则表达式在这个案例或那个案例上失败了,直到我坐下来阅读有关 unicode标签 的文档。然后我了解了一些关于Rust处理unicode以及正则表达式引擎如何处理字符类的内容,然后就是voilà,结果的正则表达式实际上并不复杂。实际上,它们几乎是从unicode定义中直接摘录的。但我想其他人可能也想做同样的事情,而不想花这么多时间去阅读它。所以我们就到了这里。 :)
感谢Mathias Bynens在JavaScript中完成这项工作,感谢@Cryptjar帮助我开始这项工作,感谢@BurntSushi以及正则表达式引擎和Rust中其他unicode故事的贡献者,使他们能够这样简单。
依赖关系
~10KB