2016-09-30 5 views
5

मैं गिट diff --word-diff-regex = कमांड का उपयोग करने की कोशिश कर रहा हूं और ऐसा लगता है कि यह किसी भी प्रकार के लुकहेड और लुकहेंड को अस्वीकार कर रहा है। मुझे रेगेक्स गिट का उपयोग करने के स्वाद को कम करने में परेशानी हो रही है। उदाहरण के लिएरीजिक्स का क्या स्वाद गिट का उपयोग करता है

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

एक अवैध नियमित अभिव्यक्ति के रूप में वापस आता है।

मैं उन सभी शब्दों को प्राप्त करने का प्रयास कर रहा हूं जो HTML टैग नहीं हैं। तो regex के परिणामस्वरूप मैचों नीचे स्ट्रिंग

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

ऐसा लगता है कि लुकहेड समर्थित नहीं है। हो सकता है कि आपको हमें यह बताना चाहिए कि अगर कोई कामकाज शामिल नहीं है तो तर्क क्या है। –

+0

मैंने यह दिखाने के लिए अपना प्रश्न अपडेट किया कि मुझे – Papajohn000

+1

के लिए रेगेक्स करने की आवश्यकता है, यह POSIX ERE का उपयोग करता है। या यहां तक ​​कि बीआरई। POSIX ने कभी भी लुकराउंड का समर्थन नहीं किया है। –

उत्तर

3

Git स्रोत regcomp और regexec का उपयोग करता है, जो 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 हैं।

(हर सी पुस्तकालय वास्तव में एक ही POSIX REG_EXTENDED लागू करता Git अपने स्वयं के कार्यान्वयन, जो सिस्टम के के स्थान पर बनाया जा सकता है भी शामिल है।।)

संपादित करें (अद्यतन सवाल प्रति): POSIX eres न अग्रदर्शी है और न ही देखो, और न ही उनके पास \w है (लेकिन [_[:alnum:]] शायद अधिकांश उद्देश्यों के लिए पर्याप्त है)।

संबंधित मुद्दे