gpt4 book ai didi

regex - 在 rust 中串联两个正则表达式字符串

转载 作者:行者123 更新时间:2023-12-03 11:42:22 28 4
gpt4 key购买 nike

我有两个变量来保存正则表达式的字符串版本。我想创建一个代表这些变量的OR的第三个变量,并且在编写rust时遇到了困难。

const numbers: &str = "/[0-9]/";
const letters: &str = "/[a-z]/";

const numbers_and_letters: &str = "([0-9]|[a-z])";

numbers_and_letters变量是我要构造的变量,但我想使用对数字和字母变量的引用来实现。
const numbers_and_letters: &str = format!("{}|{}", numbers, letters);

注意事项:
  • 数字和字母必须是&str类型
  • 我们可能需要对字符串的开头和结尾字符进行切片(即//)。

  • 我一直遇到编译器问题。任何帮助将不胜感激,谢谢!

    最佳答案

    首先
    特殊的正​​则表达式组合似乎是一个可怕的,可怕的想法,而且xy problem的可能性很高。
    确定要不要找例如 RegexSet ,还是像 nom 这样的适当的解析器组合器,或者类似的东西?
    通过帮助可能的帮助者来帮助自己

    I've been running into issues with the compiler.


    编译器生成错误消息。这些错误消息提供了有值(value)的信息。当编译器告诉您某些内容并且您需要帮助时,请粘贴编译器告诉您的内容。
    还希望在 https://play.rust-lang.org上提供完整的复制案例。
    const numbers_and_letters: &str = format!("{}|{}", numbers, letters);

    从表面上看,这显然是没有意义的: format!需要分配一个新字符串,并因此返回 String。这样就出来了。
    第二个问题是 const可能没有按照您的想象做,并且您的全局变量很可能是 static变量而不是 const
    可能解决上述问题,可能完全是错误的问题
  • 创建非constexpr静态变量的经典方法是 lazy_static once_cell ,您可以使用lazy_static格式化String,然后将其借给&str:
    use lazy_static::lazy_static; // 1.4.0

    static A: &'static str = "a";
    static B: &'static str = "b";
    lazy_static! {
    static ref C: String = format!("{}|{}", A, B);
    // not actually useful, you could borrow `C` at use-site
    static ref D: &'static str = &C;
    }
    优点是,这是一种众所周知的模式(和 crate ),并且可以在各种rustc中使用。它还使您可以执行任何可能要进行的运行时转换,因此剥离字符串中的位不是问题。
    缺点是您要手动滚动它,并且将您的类型包装在一个特殊的结构中,因此您必须取消引用D(或该问题的C)才能实际访问其内容,否则,您只是在获取包装器类型由lazy_static构造。
  • 或者使用相对较新的编译器,您可以使用const_format,其名称表明是format!的constexpr版本。
    优点是,它比lazy_static或Once_cell更简单,直接。
    缺点是它是一种不太流行的模式和 crate ,它需要最新的编译器,并且constant expressions可能尚未支持您需要的所有操作。
  • 关于regex - 在 rust 中串联两个正则表达式字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66020980/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com