2016-09-30 14 views
5

Tôi đang cố gắng sử dụng lệnh git diff --word-diff-regex = và dường như loại bỏ bất kỳ loại lookaheads và lookbehinds nào. Tôi gặp sự cố khi ghim những gì mà regex git sử dụng. Ví dụ:Hương vị nào của regex git sử dụng

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

Quay lại dưới dạng cụm từ thông dụng không hợp lệ.

Tôi đang cố gắng lấy tất cả các từ không phải là thẻ HTML. Vì vậy, các trận đấu kết quả của regex nên 'Hello' 'thế giới' 'Foo' 'Bar' cho chuỗi dưới đây

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

Dường như lookahead không được hỗ trợ. Có lẽ bạn nên cho chúng tôi biết logic là gì trong trường hợp có một workaround không liên quan đến lookahead. –

+0

Tôi đã cập nhật câu hỏi của mình để hiển thị những gì tôi cần để regex cho – Papajohn000

+1

Nó sử dụng POSIX ERE. Hoặc thậm chí là BRE. POSIX chưa bao giờ hỗ trợ các giải pháp thay thế. –

Trả lời

3

Nguồn Git sử dụng regcompregexec, được định nghĩa bởi POSIX 1003.2. Các code to compile a diff regexp là:

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

mà trong POSIX có nghĩa rằng đây là những "đại gia" biểu thức thông thường theo quy định here.

(Không phải mọi thư viện C thực sự thực hiện cùng POSIX REG_EXTENDED Git bao gồm thực hiện riêng của mình, có thể được xây dựng ở vị trí của hệ thống của..)

Chỉnh sửa (mỗi câu hỏi được cập nhật): POSIX Eres có không lookahead cũng không lookbehind, cũng không làm họ có \w (nhưng [_[:alnum:]] có lẽ là đủ gần cho hầu hết các mục đích).

Các vấn đề liên quan