我这里有一些使用了 boost::regex::perl
的遗留代码,但注释不当。我之前对一个特定的构造感到疑惑,但由于代码(或多或少)起作用了,我不愿意碰它。
现在我不得不触摸它,出于技术原因(更准确地说,当前版本的 Boost 不再接受该构造),所以我必须弄清楚它做了什么 - 或者更确切地说,是打算做的。
正则表达式的相关部分:
(?<!(\bb\s|\bb|^[a-z]\s|^[a-z]))
让我头疼的是\bb
。我知道 \b
,但找不到提到的 \bb
,在这里寻找文字 'b'
没有意义. \bb
是一些特殊的文档不足的功能,还是我必须考虑这是一个错字?
最佳答案
作为Boost似乎是 C++ 的正则表达式引擎,一个兼容性模式是 perl 兼容性——如果这是一个“perl 兼容”表达式,那么第二个 'b' 只能 是文字。
这是一个有效的表达式,几乎是以 'b' 开头的单词的特例。
这似乎是一个决定性因素,它是一个 c++ 库,它提供不是 perl 的环境,perl 兼容的正则表达式。因此,我最初认为 perl 可能会解释表达式(比如 overload::constant
)是无效的。然而,出于澄清的目的,仍然值得一提,无论调整一个表示“以'b'开头的单词”的表达方式是多么不可取。
对这个想法的唯一警告是,也许 Boost 在它自己的表达式中表现优于 Perl,并且有人会在 Perl 环境中使用 Boost 引擎,然后所有关于这是否意味着一个特殊的表达方式的赌注是错误的。这只是一次攻击,给定一个语法,其中 '!!!'在单词的开头意味着一些特殊的东西,你可以像这样利用既定的意义(不推荐!)
s/\\bb\b/(?:!!!(\\p{Alpha})|\\bb)/
这将是一件愚蠢的事情,但是当我们处理似乎不适合其任务的代码时,有成千上万种方法会导致任务失败。
关于c++ - boost::正则表达式-\bb?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4304818/