【问题标题】:How can I convert a Perl regex to work with Boost::Regex?如何将 Perl 正则表达式转换为与 Boost::Regex 一起使用?
【发布时间】:2011-02-02 00:39:43
【问题描述】:

对于以 ingeden 结尾的单词,与此 Perl 正则表达式等效的 Boost::Regex 是什么?

/ing$|ed$|en$/

...

【问题讨论】:

    标签: c++ regex perl boost-regex


    【解决方案1】:

    最重要的区别是 C++ 中的正则表达式是字符串,因此所有正则表达式特定的反斜杠序列(例如 \w\d 都应该用双引号引起来("\\w""\\d"

    【讨论】:

    • 这个perl表达式呢:'/O$/' perl表达式末尾的$是什么意思?另一个问题是:当我在 boost 中写例如表达式“^B_”时,这意味着什么?
    【解决方案2】:
    /^[\.:\,()\'\`-]/
    

    应该变成

    "^[.:,()'`-]"
    

    特殊的 Perl 正则表达式分隔符 / 在 C++ 中不存在,因此正则表达式只是一个字符串。在这些字符串中,您需要注意正确转义反斜杠(\\ 用于原始正则表达式中的每个 \)。但是,在您的示例中,所有这些反斜杠都是不必要的,因此我完全删除了它们。

    还有其他注意事项;据我所知,Boost 库中不存在一些 Perl 功能(如可变长度后视)。因此,可能无法简单地翻译任何正则表达式。不过,您的示例应该没问题。虽然有些很奇怪。 .*[0-9].* 将匹配任何包含数字的字符串,而不是 all numbers

    【讨论】:

    • 在 Perl 的字符类 ([...]) 中也不需要转义。
    • 对。他们一开始是不必要的。在某些情况下,不必要的反斜杠甚至会成为语法错误(例如\<)。
    猜你喜欢
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    • 2023-03-14
    相关资源
    最近更新 更多