2012-07-17 152 views
1

我不明白爲什麼,如果考慮到以下行(VI與設定列表)正則表達式非貪婪匹配製表符

10.0.6.5^IVirtual^IVmware^IHTTP, MS SQL, Windows SVC^IcpHelpdesk $ 

爲什麼下面的正則表達式:

^I.*?^I 

不匹配字符串'虛擬'在我上面的行?我使用正則表達式低於我的VI搜索和替換

:%s/^I.*?^I/replace/g 

然而,這沒有返回比賽在同一個字符串,如果我用

^I.*^I 

我會得到

10.0.6.5replaceIcpHelpdesk $ 

我試圖說與^I.*?^I是從第一個製表符(^I)匹配任何東西(除了換行符之外的點)零次或多次(*?)un直到你來到下一個標記與是製表符(^I

我沒有看到我失蹤和任何幫助,將不勝感激。謝謝

+2

在大多數的正則表達式語言'^'意味着開始字符串和'\ t'將是一個製表符。 – OrangeDog 2012-07-17 19:58:02

+0

你正在使用什麼程序作爲正則表達式引擎? – amon 2012-07-17 19:58:09

+0

這個例子是一個多行字符串,還是它有文字'^'? – 2012-07-17 20:03:37

回答

1

你在說vim regex嗎?在這種情況下,非貪婪量詞是\{-}

\t.\{-}\t 

否則,您可以通過不具有否定組匹配製表符做到這一點:

\t[^\t]*\t 
+1

Thor - 非常感謝你指的是vim正則表達式,並不知道有一個不同的非貪婪量詞。有時間在我的最後做一些閱讀。再次感謝 – vloche 2012-07-17 20:20:29

+0

如果您熟悉Python的正則表達式系統(這與Perl的系統並沒有什麼不同),那麼圍繞vim的正則表達式系統應該不難。 http://vimregex.com/是一個很好的開始。對於隨後無法識別的任何符號,請在vim的本機幫助文件中搜索它們,以填補剩餘的大部分空白。對我來說,這是他們沒有解釋的非匹配組符號,所以我做了'''h:\%('''並得到了我的答案 – SeldomNeedy 2015-03-20 17:44:35