Tôi đang làm một số thể dục biểu hiện chính quy. Tôi đặt bản thân mình nhiệm vụ cố gắng tìm kiếm mã C# nơi có một cách sử dụng toán tử không theo sau bởi một kiểm tra rỗng trong một khoảng không gian hợp lý. Bây giờ tôi không muốn phân tích mã C#. Ví dụ. Tôi muốn chụp các đoạn mã nhưBiểu thức chính quy tiêu cực lookahead
var x1 = x as SimpleRes;
var y1 = y as SimpleRes;
if(x1.a == y1.a)
Tuy nhiên, không nắm bắt
var x1 = x as SimpleRes;
var y1 = y as SimpleRes;
if(x1 == null)
cũng không cho rằng vấn đề
var x1 = x as SimpleRes;
var y1 = y as SimpleRes;
if(somethingunrelated == null) {...}
if(x1.a == y1.a)
Như vậy bất kỳ ngẫu nhiên null-kiểm tra sẽ được tính như là một "kiểm tra tốt "và do đó không tìm thấy.
Câu hỏi đặt ra là: Làm cách nào để tôi khớp thứ gì đó trong khi đảm bảo không tìm thấy thứ gì đó khác trong nền đất của nó.
Tôi đã thử cách tiếp cận ngây thơ, tìm kiếm 'dưới dạng' rồi thực hiện một cái nhìn tiêu cực trong vòng 150 ký tự.
\bas\b.{1,150}(?!\b==\s*null\b)
Biểu thức chính quy ở trên phù hợp với tất cả các ví dụ trên. Ruột của tôi nói với tôi, vấn đề là nhìn về phía trước và sau đó làm tiêu cực lookahead có thể tìm thấy nhiều tình huống mà lookahead không tìm thấy '== null'.
Nếu tôi thử phủ nhận toàn bộ biểu thức, thì điều đó cũng không giúp ích gì, tại thời điểm đó sẽ khớp với hầu hết mã C# xung quanh.
Bạn không thể sử dụng trình phân tích cú pháp C# thích hợp? – Gumbo
Tôi đã nói ngay từ đầu "Tôi đang tập thể dục thể dục thường xuyên. Tôi tự đặt mình vào nhiệm vụ tìm kiếm C#" ... –
Đây có phải là xem bóng đá và suy nghĩ "nó giống như thể dục dụng cụ"? :-) – xanatos