c ++ 11 regex lookahead排除单词

时间:2017-07-04 14:19:17

标签: regex c++11

我有一个字符串列表:

  1. ReferencePrice
  2. ReferenceCurrentPrice
  3. CostPrice
  4. AverageCostPrice ...
  5. 我想过滤掉所有字符串:

    1. 包含'价格',
    2. 但不包含'CostPrice'
    3. 我的正则表达式是'(?成本)价格',但它可以匹配第三个字符串'CostPrice',为什么?什么是正确的正则表达式?

      经过一番调查,我知道“前瞻”意味着什么。这意味着看起来正确,所以类似的lookbehind意味着向左看

      正确的正则表达式应该是负面的后瞻性正则表达式:

      var arr = ["a", cond && "bar"];
      arr.filter( e => e)
      

      试一试:https://regex101.com/r/m3238r/1

      不幸的是,c ++ 11不支持lookbehind。提升正则表达式。 http://www.boost.org/doc/libs/1_50_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html

1 个答案:

答案 0 :(得分:1)

不久之后,我会回答(在我看来)愚蠢的解决方案(必须有更好的解决方案:P)。

((?!Cost)....|^.{0,3})Price

如果前面有4个字符(至少),请确保它不是Cost。或者,请确保Price之前不超过3个字符。

See it here at regex101