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

标签 c++ regex perl boost

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

相关文章:

java - 用于字符串拆分的正则表达式无法正常工作

perl - 如何在 CentOS 7 上安装 perl-RRD-Simple 软件包?

perl - CPAN 在 EC2/Linux AMI 上安装失败 : "Couldn' t untar"

perl - 如何获取仅用于文件上传的 CGI.pm 字段列表?

C++读取二进制文件

c++ - Qt Eclipse 集成和自定义小部件插件

c# - 将实时数据发布到 Excel

javascript - 无法转义 "?"但 "\"在 javascript 正则表达式中工作正常

c++ - 构造函数中的数组设置意味着稍后失败

regex - 使用正则表达式从字符串中删除第一个零值