这个复杂的正则表达式做什么
what does this convoluted regex do
我在工作中遇到了以下正则表达式。它做什么?
,(?=(?:[^"]*"[^"]*")*(?![^"]*"))
为了理解它,我将其分为以下几个部分
,
=匹配所有具有,
的内容(?=
=后面跟着(?:[^"]*"[^"]*")*
=与"
不匹配的任何内容,后面跟着"
,后面跟着与"
不匹配的所有内容,后面跟"
。例如,1111"aaaaa">(?![^"]*")
=但后面没有任何与"
不匹配且与"
匹配的内容
换句话说,匹配,
后跟11111"111"
或""
的任何内容
使用上面表达式的用例,只是为了标记一个字符串,用,
分隔,但我假设作者是为一些更通用的东西而构建的。
有人能提供比上面更简单的解释吗?
上面的表达式用于将表达式分配给boost::regex()。
更新:实际上,它是在搜索","逗号,并带有以下约束
逗号后面有偶数"是可以的
但是,逗号后面有一个"是不好的
例如,考虑字符串:a,"h,w",23
第一个","是匹配的,因为它有后面的偶数"("h,w")
"h,w"之间的第二个","不匹配,因为第二个表达式(?![^\"]*\")规定","后面不应跟一个">
最后一个","匹配。
最终输出为2,
看起来它将匹配任何逗号,但前提是该逗号后面有偶数个"
字符。
,
-逗号。
(?=
-之后是…
(?:[^"]*"[^"]*")*
-以"
标记结尾并包含偶数个"
标记的任何字符串,或空字符串,
(?![^"]*")
-并且以后在字符串中没有其他"
标记。
CCD_ 24关闭CCD_。
如果我们已经知道整个输入字符串的"
字符总数是偶数,不存在嵌套或转义引号之类的事情,并且引号之间的逗号不应被视为分隔符,那么这可能会很有用。例如,给定输入
25,"Hello, world!","More text",123.45
正则表达式不应匹配Hello和world之间的逗号,而应匹配其他三个逗号。
- 使用正则表达式regex_search在字符串中查找字符串
- 在 C++ 中使用正则表达式错误时出现问题 括号表达式中的范围无效
- C++正则表达式无限循环
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- 定义有趣的宏和正则表达式在Z3 C++绑定
- 用C++编写正则表达式的正确方法是什么?
- C++:匹配正则表达式,什么是匹配?
- 什么是正则表达式中无与伦比的匹配?
- 这个正则表达式的括号以什么方式"mismatched"?
- 解析 HTTP 的摘要式身份验证的正确正则表达式模式是什么?
- C++11 中的默认正则表达式引擎是什么?
- 这个复杂的正则表达式做什么
- 这种使用增强正则表达式库有什么问题
- regex_error。我的正则表达式有什么问题
- "~"标记在 Perl 正则表达式中有什么用?
- c++正则表达式/flex++中的模式{sp}是什么意思
- 正则表达式匹配重叠时会发生什么
- VS10 中文件名的正则表达式格式有什么问题<regex>?
- 什么正则表达式只能在C++源文件中查找字符串
- 我的正则表达式代码有什么问题?