gpt4 book ai didi

c++ - 转义字符串常量以嵌入 std::regex

转载 作者:可可西里 更新时间:2023-11-01 18:00:02 29 4
gpt4 key购买 nike

C++11 有 6 种不同的正则表达式语法供您使用。就我而言,我正在与使用修改后的 ECMAScript 正则表达式的组件进行交互。

我需要创建一个正则表达式“匹配以 X 开头的字符串”,其中 X 是我拥有的字符串文字。

所以我要的正则表达式大概是^X.*。除了字符串 X 可以包含更多正则表达式特殊字符,我希望它们出现。

这意味着我真的想要 ^ escaped(X) .*.

现在,我可以阅读 ECMAScript 文档,找到所有具有特殊含义的字符,编写一个转义它们的函数,然后完成。但这似乎不够优雅、低效且容易出错——尤其是如果我想支持 C++ 目前支持的所有 6 种正则表达式,更不用说将来了。

标准中是否有一种简单的方法来转义文字字符串以嵌入到 C++ 正则表达式中,可能作为正则表达式语法的函数,还是我必须自己动手?

Here是一个使用 boost 库的类似问题,其中转义列表是硬编码的,然后生成一个反斜杠正则表达式。我是否减少了适应该答案以在 std 中使用?

最佳答案

如果你必须自己写,你只需要知道两种。
BRE 和其他。

这些应该在下面工作。使用 ECMAScript 类型的正则表达式对输入字符串进行操作。

以下正则表达式是使用此处的特殊字符制定的:
What special characters must be escaped in regular expressions?
在回答 Legacy RegEx Flavors (BRE/ERE)

两者使用相同的替换:"\\\\$1"

对于BRE输入:

 # "(\\\\[+?(){}|]|[.^$*\\[\\]\\\\-])"


( # (1 start)
\\ [+?(){}|] # not sure this is needed (its not needed)
|
[.^$*\[\]\\-]
) # (1 end)

对于EREECMAScript 输入:

 # "([.^$*+?()\\[\\]{}\\\\|-])"

( [.^$*+?()\[\]{}\\|-] ) # (1)

BRE 输入示例:

之前 -

+_)(*&^%$#@!asdfasfd hello
+ ? ( ) { } |
\+ \? \( \) \{ \} \|
\\+ \\? \\( \\) \\{ \\} \\|
}{":][';/.,<>?
here is

之后 -

+_)(\*&\^%\$#@!asdfasfd hello
+ ? ( ) { } |
\\+ \\? \\( \\) \\{ \\} \\|
\\\\+ \\\\? \\\\( \\\\) \\\\{ \\\\} \\\\|
}{":\]\[';/\.,<>?
here is

关于c++ - 转义字符串常量以嵌入 std::regex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32251486/

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