2017-02-02 166 views
0

我的字符串列表是,正則表達式不匹配特定的字符或匹配空

1. bc  // should match 
2. abc // should not match 
3. bc-bc // should match 
4. ab-bc // should match 
5. bc-ab // should match 

我想匹配所有bc秒。如果它以字符串1中的任何其他字符如a開頭,我不想匹配。

我試着用正則表達式[^a]bc。它不匹配字符串2以及字符串1和5,因爲[]需要一個字符。然後我嘗試了[^a]?bc。它也匹配了字符串2。如何使正則表達式匹配空或不是特定的字符列表?

+0

'(?<!a)(bc)'嘗試負面看後面。 – MYGz

+2

如果要匹配整個單詞「bc」,請使用['/\bbc\b/'](https://regex101.com/r/OtEb9K/1)。 –

+0

@MYGz這不適用於perl。我得到了'無效的正則表達式'錯誤 – RaR

回答

1

你想匹配bc只有當它不是由一組特定的字符開頭(例如像ax,或y)?然後,這正是一個negative lookbehind assertion是什麼:

(?<![axy])bc 

將匹配bcbbc,但不abcybc

如果你想匹配bc作爲一個完整的「單詞」,我。即不靠近任何字母或數字,使用word boundary anchors

\bbc\b 

注意在MongoDB中,爲了能夠使用像回顧後功能僅適用於PCRE引擎(而不是JavaScript的),你需要(例如:使用字符串代替正則表達式對象),例如:

{ name: { $regex: '(?<![axy])bc' } }