gpt4 book ai didi

c++ - boost::正则表达式-\bb?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:22:19 27 4
gpt4 key购买 nike

我这里有一些使用了 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com