2013-02-28 110 views
27

This answer暗示grep -P支持(?:pattern)語法,但它似乎對我無效(該組仍被捕獲並顯示爲匹配的一部分)。我錯過了什麼嗎?如何在grep中使用非捕獲組?

我上this codegrep -oP "(?:syntaxHighlighterConfig\.)[a-zA-Z]+Color" SyntaxHighlighter.js和期望的結果是:

wikilinkColor 
externalLinkColor 
parameterColor 
... 

而是我得到:

syntaxHighlighterConfig.wikilinkColor 
syntaxHighlighterConfig.externalLinkColor 
syntaxHighlighterConfig.parameterColor 
... 
+0

你能表現出一定的sampel輸入/輸出? – 2013-02-28 13:10:14

+1

@sputnick我編輯了這個問題來添加更多的細節。 – waldyrious 2013-02-28 13:16:28

+0

在展示你期望的或你得到的東西之前,你應該已經包含了你正在選擇的文件的內容 – barlop 2016-04-11 10:49:37

回答

44

「非捕獲」並不意味着該集團ISN不是比賽的一部分;這意味着該組的價值未保存用於後向引用。你所尋找的是一個向後看零寬度斷言

grep -Po "(?<=syntaxHighlighterConfig\.)[a-zA-Z]+Color" file 
+0

請注意,所有後視圖都是零寬度 – barlop 2016-04-11 10:47:17

+5

後視圖需要固定長度。在這種情況下它有幫助,但它不在其他地方。 – Cromax 2016-07-17 20:12:54

+3

對於引用,'(?<= ...)'是**正向lookbehind斷言**,'(?<!...)'是**負向lookbehind斷言**,**(?= ...)是**正向lookahead斷言**,'(?!...)'是**否定前瞻斷言**。 [更多這裏](http://www.regular-expressions.info/lookaround.html)。 – Rockallite 2017-02-08 07:11:36