Dev*_*lar 5 c++ regex perl boost
我在这里使用了一些评论很差的遗留代码boost::regex::perl.我之前想知道一个特定的构造,但由于代码工作(或多或少),我不愿触摸它.
现在我必须触摸它,出于技术原因(更确切地说,当前版本的Boost不再接受构造),所以我必须弄清楚它的作用 - 或者更确切地说,是打算做的.
正则表达式的相关部分:
(?<!(\bb\s|\bb|^[a-z]\s|^[a-z]))
Run Code Online (Sandbox Code Playgroud)
令我头疼的是\bb.我知道\b,但我找不到提及\bb,寻找文字'b'在这里没有意义.是\bb一些特殊的未记录功能,还是我不得不考虑这是一个错字?
(\bb\s|\bb|^[a-z]\s|^[a-z])b如果 a 前面没有其他单词字符,则匹配 a ;如果它位于字符串的开头,则匹配任何小写字母。在任何一种情况下,字母后面都可以跟一个空白字符。(如果设置了不区分大小写模式,它也可以匹配大写字母,^如果设置了多行模式,它也可以匹配行的开头。)
但在回顾中,它甚至不应该编译。在某些风格中,lookbehind 可以包含多个具有不同固定长度的替代项,但交替必须位于lookbehind 的顶层。也就是说,(?<=abc|xy|12345)会起作用,但(?<=(abc|xy|12345))不会。因此,即使在这些风格中,您的正则表达式也无法工作,但 Boost 的文档只是说后向表达式必须是固定长度的。
如果您确实需要考虑该正则表达式匹配的所有四种可能性,我建议您将lookbehind分成两部分:
(?<!\bb|^[a-z])(?<!(?:\bb|^[a-z])\s)
Run Code Online (Sandbox Code Playgroud)