我正在寻找一个搜索,其中字符串(bar)不会立即被两个字符串中的任何一个(foo)或(boo)
例如
foo=bar
不匹配
foo=baz bar
应匹配
bar
应匹配
boo=bar
不匹配
我认为正则表达式背后的外观对此非常完美。但是当我尝试使用MSVC ++中的(?<!
作为后面的看法时,我得到一个未处理的异常
是否支持断言?它在语法上是不同的吗?或者有人可以帮我写这个正则表达式或模仿行为吗?
答案 0 :(得分:2)
了解使用Boost.Regex或Boost.Xpressive。 MSVC ++ 10的正则表达式实现并不完整,而Boost(适用于Regex和Xpressive)都是如此。两者都有其优点和缺点。
然而,由于编译时正则表达式编译,Xpressive更快,并且提供了更好的正则表达式语法检查,它往往会创建一个 lot 符号,因此您需要查看几兆字节的增加调试信息,至少。
正则表达式很快,并且不需要表达式使用运算符来进行正则表达式构造。但是,它确实需要在库中进行链接。
还有其他C ++正则表达式引擎可以执行perl正则表达式,但是使用Boost是非常轻松的,我也没有遇到任何问题,无论我抛出什么。
答案 1 :(得分:1)
并不是很多正则表达式支持无限制的外观,但它们都支持无限前瞻。
您可以反转字符串,使用前瞻并再次反转。但是,这对于大型琴弦来说是昂贵的。
您可以使用有界的lookbehind。如果一些正则表达式确切地知道它们的确切或最大长度,它们会支持lookbehind。
您可以找到没有lookbehind的整个字符串,然后手动丢弃一些匹配项。如果不考虑重叠,您可以将lookbehind更改为可选的捕获组,然后丢弃捕获组匹配的匹配项。当替换正面的后观时,可选的捕获组不需要是可选的也不是捕获(也不是组)。