我在工作中遇到了以下正则表达式。它有什么作用?
,(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))
为了理解它,我把它分成以下几个部分
,
=匹配所有有,
(?=
= 紧随其后(?:[^\"]*\"[^\"]*\")*
= 任何不匹配的内容"
,后跟"
,然后是任何不匹配的内容"
,然后是"
。例如,1111"aaaaa"(?![^\"]*\")
= 但后面没有任何不"
匹配的内容"
换句话说,匹配任何,
后面跟着11111"111"
OR 的东西""
使用上述表达式的用例,只是为了标记一个字符串,用 分隔,
,但我假设作者是为一些更通用的东西而构建的。
谁能提供比上面更简单的解释?
上面的表达式用于将表达式分配给 boost::regex()。
更新:实际上,它正在搜索“,”逗号,具有以下约束
逗号后面可以有偶数个“”
但是,逗号后面不能有一个 "
例如考虑字符串:a, "h,w", 23
第一个 "," 匹配,因为它后面有偶数个 " ("h,w")
"h,w" 之间的第二个 "," 不匹配,因为第二个表达式 (?![^\"]*\") 指出 "," 后面不应跟一个 "
最后最后一个 "," 匹配。
最终输出为 2 , ,