2009-05-18 41 views
9

tôi có các dòng sau:Regex cho phù hợp với dòng không chứa một từ

Message:Polarion commit Mon May 18 06:59:37 CEST 2009 
Message:Polarion commit Fri May 15 19:39:45 CEST 2009 
Message:424-18: use new variable 
Message:Polarion commit Fri May 15 19:29:10 CEST 2009 
Message:Polarion commit Fri May 15 19:27:23 CEST 2009 
Message:000-00: do something else 
Message:Polarion commit Fri May 15 17:50:30 CEST 2009 
Message:401-103: added application part 
Message:Polarion commit Fri May 15 17:48:46 CEST 2009 
Message:Polarion commit Fri May 15 17:42:04 CEST 2009 

và tôi muốn để có được tất cả các dòng KHÔNG chứa "Polarion"

làm thế nào tôi sẽ làm điều này?

ps: tôi thấy: Regex to match against something that is not a specific substring nhưng nó không giúp tôi

pps: Tôi đang cố gắng để làm điều này trong TortoiseSVN để chọn các thông điệp đăng nhập, và tôi nghĩ rằng đó là một vấn đề với "lookbehind tiêu cực "

+0

Vui lòng thụt lề mã và ví dụ các tệp văn bản thuần túy có bốn dấu cách để đảm bảo định dạng đúng. Bạn có thể làm điều này bằng cách chọn văn bản và nhấn ctrl-k. Chúc mừng. – Stephan202

+0

Không phải tất cả các công cụ regex đều hỗ trợ giao diện tiêu cực - TortoiseSVN rất có khả năng là công cụ không hỗ trợ. –

Trả lời

9

Nó có thể dễ dàng hơn nếu bạn làm cho cụm từ thông dụng của bạn khớp với thứ bạn đang tìm kiếm và sau đó đảo ngược kết quả.

Hầu hết các công cụ sử dụng Regex cho phép bạn đảo ngược kết quả tìm kiếm, thường gọi tùy chọn 'v' tại V ERT (giữ cho tôi đựng pin- tôi nsensitive):

ví dụ

grep -v <search> 
find /v <search> 

, vv

+0

Hmmm, chữ in đậm đầu tiên, v invert hiển thị tốt trong bản xem trước nhưng có vẻ sai ở đây ... –

+0

Dấu hoa thị không được sử dụng bên trong một từ, nhưng ... sẽ hoạt động. Đây không phải là lần đầu tiên tôi nhìn thấy khung xem trước cho kết quả không có thật. –

+0

+1, đây chỉ là những gì tôi đang tìm kiếm – Claudiu

19

expresion này sẽ thực hiện công việc.

^(?:.(?<!Polarion))*$ 

Nó sử dụng xác nhận xác thực tiêu cực không có chiều rộng bằng 0 để xác nhận rằng chuỗi không chứa "Phân cực".

 
    ^    Anchor to start of string 
    (?:    Non-capturing group 
     .    Match any character 
     (?<!Polarion) Zero-width negative lookbehind assertion - text to the 
         left of the current position must not be "Polarion" 
    ) 
    *     Zero or more times 
    $     Anchor to end of string 

Phiên bản sau sẽ thực hiện xác nhận chỉ sau 'n' - có thể điều này sẽ nhanh hơn, có thể chậm hơn.

^(?:[^n]*|n(?<!Polarion))*$ 
+1

Câu trả lời thú vị, nhưng grep -v đơn giản hơn rất nhiều. –

+0

Wow đã giúp tôi với các trình soạn thảo văn bản và java :-) khác. Cảm ơn. –

+0

hoạt động tốt trong notepad ++ – BurnsBA

0

Tôi không thể tìm thấy bất kỳ thông tin nào về công cụ regex mà TortoiseSVN đang sử dụng, nhưng bạn có thể yêu cầu mailing list. Không phải tất cả các công cụ đều hỗ trợ các tính năng nâng cao như nhìn phía sau không có chiều rộng tiêu cực.

3

Dưới đây là một giải pháp sử dụng một lookahead tiêu cực, được hỗ trợ rộng rãi hơn một lookbehind:

^Message:(?!Polarion).*$ 

(Ngoài ra, vì chúng tôi biết nơi Polarion có thể xuất hiện, chúng tôi không cần phải làm bất cứ vô nghĩa . công cụ ưa thích Daniel đề nghị)


Giải thích về sự biểu hiện trên, trong hình thức bình luận regex, là:

(?x)  # Enable comments 
^   # Start of string (start of line in multiline mode) 
Message: # Literal text 
(?!  # Begin negative lookahead 
Polarion # Literal text 
)   # End negative lookahead 
.*   # Greedily match any number of any character 
$   # End of string (end of line in multiline mode) 
0

Điều này đã làm việc cho tôi và nhanh chóng nhập (trong hộp thoại tìm kiếm hoặc tương tự): ^(?!.*not this).*but this

+0

bạn có thể hiển thị một số ví dụ về công việc –

0

this answer hiển thị, hộp tìm kiếm của TortoiseSVN không bị giới hạn đối với cụm từ thông dụng. Cụ thể, nếu một biểu thức được đính kèm trong !(), nó bị phủ định và các dòng không khớp sẽ hiển thị trong kết quả. Các ! phủ nhận các biểu thức kèm theo (thường xuyên hay không).

Đối với trường hợp của bạn,

!(Polarion) 

nên làm các trick.

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