Yak*_*ont 8 c++ regex escaping c++11
C++ 11有6种不同的正则表达式语法可供使用.在我的例子中,我正在与使用修改的ECMAScript正则表达式的组件进行交互.
我需要创建一个正则表达式"匹配以X开头的字符串",其中X是我的字符串文字.
所以我想要的正则表达式是粗略的^X.*.除了字符串X可以包含更多的正则表达式特殊字符,我希望它们发生.
这意味着我真的想要^ escaped(X) .*.
现在,我可以阅读ECMAScript文档,找到具有特殊含义的所有字符,编写一个逃避它们的函数,然后完成.但这似乎不优雅,低效且容易出错 - 特别是如果我想支持当前C++支持的所有6种正则表达式,更不用说将来了.
标准中是否有一种简单的方法可以将文字字符串转换为嵌入C++正则表达式,可能是正则表达式语法的函数,还是我必须自己滚动?
下面是使用boost库的类似问题,其中转义列表是硬编码的,然后生成一个反斜杠的正则表达式.我是否已经缩减为适应该答案std?
小智 1
如果您必须自己编写,那么您只需要知道两种。
BRE 和其他。
这些应该在下面起作用。使用ECMAScript类型正则表达式对输入字符串进行操作。
下面的正则表达式是使用此处的特殊字符来制定的:
在正则表达式中必须转义哪些特殊字符?
正在回答中Legacy RegEx Flavors (BRE/ERE)
两者都使用相同的替换:"\\\\$1"
对于BRE输入:
# "(\\\\[+?(){}|]|[.^$*\\[\\]\\\\-])"
( # (1 start)
\\ [+?(){}|] # not sure this is needed (its not needed)
|
[.^$*\[\]\\-]
) # (1 end)
Run Code Online (Sandbox Code Playgroud)
对于ERE或ECMAScript输入:
# "([.^$*+?()\\[\\]{}\\\\|-])"
( [.^$*+?()\[\]{}\\|-] ) # (1)
Run Code Online (Sandbox Code Playgroud)
BRE 输入示例:
前 -
+_)(*&^%$#@!asdfasfd hello
+ ? ( ) { } |
\+ \? \( \) \{ \} \|
\\+ \\? \\( \\) \\{ \\} \\|
}{":][';/.,<>?
here is
Run Code Online (Sandbox Code Playgroud)
后 -
+_)(\*&\^%\$#@!asdfasfd hello
+ ? ( ) { } |
\\+ \\? \\( \\) \\{ \\} \\|
\\\\+ \\\\? \\\\( \\\\) \\\\{ \\\\} \\\\|
}{":\]\[';/\.,<>?
here is
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
907 次 |
| 最近记录: |