2017-09-12 27 views
-3

我想使用正則表達式來匹配所有出現的短語,但不包含在某些分隔字符中。我試圖把它們放在一起,但是在負向視覺上遇到了一些困難。正則表達式 - 查找不包含在模式內的匹配

我的搜索短語是「我的短語」。起始分隔符標籤是[[和結束分隔符標籤是]]。我想搜索的字符串是:

這是一個句子我的短語,這是另一個我不想在[[我的短語]上匹配的部分]。我想找到這個發生我的短語

從這個字符串我希望能找到除[[]]中包含的所有「我的短語」的出現。

我希望這是有道理的,在此先感謝任何指導。

+0

請分享你的正則表達式。您可能需要根據模式調整代碼,並且在這裏很可能沒有必要了。當需要匹配某些分隔符之外的內容時,它幾乎總是意味着與分隔的子字符串匹配,然後在捕獲任何一個分隔符時匹配其他上下文中需要的內容。你最終的目標是什麼?從預期的上下文中提取我的短語? –

+0

你喜歡說'source.IndexOf(「[[my phrase]]」)',或'source.Replace(「[[my phrase]]」,「myPhraseSubstitution」);'? –

+0

我正在尋找所有出現的「我的短語」,他們不包含在[[]]內。隨着比賽,我會轉換字符串。 – squariegoes

回答

1

[^#]my phrase[^#]

我敲了一個正則表達式,會做你的要求,由此可以看出here

從字面上直接跳出#作爲一個字符並允許任何其他字符被返回。您可以返回這些結果的索引,但記得要去掉字符串的第一個和最後一個字符。

注:這不會拿起任何「我的短語」結束句子沒有一個字符後它

編輯 - 在這裏看到,因爲你改變的範圍,而我在寫這個答案, 對於其他定界符正則表達式:

[^[[]my phrase[^\]\]]

1
(?<=[^\[])my phrase(?=[^\]]*) 

這也會消除尾隨的標點符號。

+0

'(?<= [^ \ [])由於否定的字符類必須匹配char以外的char(s)定義。 –

+0

如果圖案在最後,它會匹配 - *允許0或更多的發生。但是,是的,爲了在開始時匹配它,這是更好的: '(?<= [^ \ [])我的短語(?= [^ \]] *)| ^我的短語(?= [^ \]] *)' –

+0

謝謝,這有助於 – squariegoes