2016-09-30 34 views
5

我試圖使用git diff --word-diff-regex =命令,它似乎拒絕任何類型的lookaheads和lookbeheads。我無法確定git使用哪種正則表達式。例如,什麼味道的正則表達式使用

git diff --word-diff-regex='([.\w]+)(?!>)' 

回來作爲無效的正則表達式。

我想獲取所有不是HTML標籤的單詞。因此,所產生的正則表達式匹配的應該是「你好」「世界」「富」「酒吧」爲以下字符串

<p> Hello World </p><p> Foo Bar </p> 
+0

看起來前瞻不被支持。也許你應該讓我們知道,如果有一個不涉及預見的解決方法,邏輯是什麼。 –

+0

我更新了我的問題,以顯示我需要的正則表達式 – Papajohn000

+1

它使用POSIX ERE。甚至BRE。 POSIX從來不支持lookarounds。 –

回答

3

Git的源使用regcompregexec,這是由POSIX 1003.2定義。所述code to compile a diff regexp是:

  if (regcomp(ecbdata->diff_words->word_regex, 
         o->word_regex, 
         REG_EXTENDED | REG_NEWLINE)) 

這在POSIX意味着這些如所定義的here「擴展」的正則表達式。

(並不是每一個C庫實際上實現相同的POSIX REG_EXTENDED的Git包括它自己的實現,它可以建立替代系統的。)

編輯(每更新問題):POSIX ERES既沒有超前,也沒有向後看,也沒有\w(但對於大多數目的而言,[_[:alnum:]]可能足夠接近)。

相關問題