2017-07-04 72 views
0

我有一個字符串列表:C++ 11的正則表達式前瞻排除字

  1. ReferencePrice
  2. ReferenceCurrentPrice
  3. CostPrice
  4. AverageCostPrice ...

我想過濾列出所有字符串:

  1. ,載 '價格',
  2. 但不包含 'CostPrice'

我的正則表達式是 '(?!成本)價格',但能匹配第三根弦 'CostPrice',爲什麼呢?什麼是正確的正則表達式?


經過一番調查,我知道什麼是 '超前' 的意思。這意味着看起來正確,所以同樣向後看意味着看起來離開

正確的正則表達式應該是負回顧後發正則表達式:

(?<!Cost)Price 

試試:https://regex101.com/r/m3238r/1

不幸的是,C++ 11不支持回顧後。 Boost正則表達式。 http://www.boost.org/doc/libs/1_50_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html

+0

你需要一個「看後面」,而不是C++ 11顯然不支持。 – ClasG

+0

@ClasG是否可以爲我的情況使用c + + 11正則表達式? – user1633272

回答

1

不得不採取的很快,我會回答(在我看來)愚蠢的解決方案(必須有更好的:P)。

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

如果4個字符(ATLEAST)之前,請確保它不是Cost。或者,確保Price之前不超過3個字符。

See it here at regex101

+0

好解釋和文檔。謝謝。不知道是否有更好的。 – user1633272

+0

可以簡化爲((!!Cost)。{4} | ^。{0,3})價格:-) – user1633272

+0

@ user1633272正確。這使得它表現更好,但是,當正則表達式的長度不縮短時,'....'更容易閱讀/理解。 – ClasG