2016-09-30 4 views
5

J'essaie d'utiliser la commande git diff --word-diff-regex = et il semble rejeter tous les types de lookaheads et lookbehinds. Je n'arrive pas à identifier la saveur de regex git. Par exempleQuelle est l'utilisation de regex git

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

Revient comme une expression régulière non valide. J'essaie d'obtenir tous les mots qui ne sont pas des balises HTML. Ainsi, les résultats obtenus de regex doivent être « Bonjour » « Bar « Foo » « Monde » » pour la chaîne ci-dessous

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

Il semble que lookahead n'est pas supporté. Peut-être que vous devriez nous faire savoir quelle est la logique dans le cas où il y aurait une solution de contournement ne impliquant pas lookahead. –

+0

J'ai mis à jour ma question pour montrer ce dont j'ai besoin pour regex pour – Papajohn000

+1

Il utilise POSIX ERE. Ou même BRE. POSIX n'a ​​jamais supporté les lookarounds. –

Répondre

3

La source Git utilise regcomp et regexec, qui sont définies par POSIX 1003.2. Le code to compile a diff regexp est:

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

qui signifie que ces Posix sont "étendues" expressions régulières telles que définies here.

(pas toutes les bibliothèques C met effectivement en œuvre la même POSIX REG_EXTENDED Git comprend sa propre mise en œuvre, ce qui peut être construit à la place de ce système..)

Modifier (par question mise à jour): ERE POSIX ni préanalyse ni lookbehind, ni ils ont \w (mais [_[:alnum:]] est probablement assez proche pour la plupart des fins).