2016-09-30 23 views
5

Próbuję użyć polecenia git diff - word-diff-regex = i wydaje się, że odrzuca wszelkie typy uprzedzeń i lookbehindów. Mam problem z ustaleniem, jaki smak używa regex git. Na przykład:Jaki smak regex używa git?

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

Powraca jako nieprawidłowe wyrażenie regularne.

Próbuję uzyskać wszystkie słowa, które nie są znacznikami HTML. Tak powstałe mecze regex powinny być „Hello World” „” bar „Foo” „” na poniższy ciąg

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

Wygląda na to, że wcześniejsza rezerwacja nie jest obsługiwana. Może powinieneś poinformować nas o tym, na czym polega logika, na wypadek gdyby obejście nie było obejściem. –

+0

Zaktualizowałem moje pytanie, aby pokazać, co muszę wyreperować dla – Papajohn000

+1

Używa POSIX ERE. A nawet BRE. POSIX nigdy nie wspierał przeglądów. –

Odpowiedz

3

Źródłem Git używa regcomp i regexec, które są zdefiniowane przez POSIX 1003.2. code to compile a diff regexp jest:

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

który w POSIX oznacza, że ​​są to „rozszerzone” wyrażenia regularne zdefiniowane here.

(Nie każda biblioteka C rzeczywiście realizuje ten sam POSIX REG_EXTENDED Git zawiera własną implementację, która może być zbudowany w miejscu systemu.).

Edycja (za zaktualizowanej pytanie): POSIX Eres mają ani uprzedzona ani lookbehind, ani nie mają \w (ale [_[:alnum:]] jest prawdopodobnie wystarczająco blisko dla większości celów).