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