【问题标题】:Is there any way to have dot (.) match newline in C++ TR1 Regular Expressions?有没有办法让点 (.) 匹配 C++ TR1 正则表达式中的换行符?
【发布时间】:2011-01-04 09:09:03
【问题描述】:

我在 http://msdn.microsoft.com/en-us/library/bb982727.aspx 上找不到任何相关信息。

也许我可以使用 '[^]+' 来匹配所有内容,但这似乎是一种 hack?

谢谢。

【问题讨论】:

标签: c++ regex tr1


【解决方案1】:

Boost.Regex 有一个 mod_s 标志来使点匹配换行符,但它不是 TR1 正则表达式标准的一部分。 (据我所知,也不能作为 Microsoft 扩展提供)

作为一种解决方法,您可以使用[\s\S](这意味着匹配任何空白或任何非空白)。

【讨论】:

    【解决方案2】:

    由于 C++ 正则表达式似乎基于 ECMAScript 正则表达式,因此 JavaScript 中关于相同内容的 answer to the recent question 可能会对您有所帮助。

    [^] 应该可以工作,但如果您想要更清晰且不那么骇人听闻的东西,您可以试试(.|\n)

    【讨论】:

      【解决方案3】:

      人们使用的一个技巧是一个包含任何非空字符的字符类。空字符以十六进制表示。它看起来像这样:

      [^\x00]+
      

      【讨论】:

        【解决方案4】:

        您可以切换到非 ECMA 风格的正则表达式(有许多标志可以控制 regext 风格)。如果我没记错的话,任何 POSIX 正则表达式都应该将换行符与. 匹配。

        【讨论】:

        • 这适用于例如extended 正则表达式,在 Linux 上使用 gcc 和在 macOSX 上使用 Apple clang。可悲的是,它不适用于 Visual Studio,至少不适用于我尝试过的 2019 v16.8.0。因此它不是一个通用的解决方案。
        猜你喜欢
        • 2019-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-17
        • 2022-01-13
        • 1970-01-01
        • 2020-06-19
        相关资源
        最近更新 更多