Tôi đang sử dụng regex với PowerGrep để tìm kiếm thông qua một loạt tệp. Tôi đang làm việc với các tệp java và mục tiêu của tôi là tìm tất cả bắt giữ blocks không chứa từ log
trong khối để tôi có thể thêm ghi nhật ký. Có rất nhiều tập tin, do đó, đi qua chúng bằng tay là không thực sự khả thi.Regex tìm khối catch mà không cần đăng nhập
Các ví dụ về những gì nên được tìm thấy
catch (Exception e) {
//comment#
int math = 1 +2 * (3);
String email = "[email protected]";
anothermethod.call();
//no logging
}
và
catch(AnotherException e) {} //no logging
Các ví dụ về những gì nên KHÔNG được tìm thấy
catch(AnotherException e) {
//some code
log.error("Error message");
//some more code
}
và
catch(BadE_xception e) { log.error(e); }
Tôi không phải là rất có kinh nghiệm với regex, nhưng đây là những gì tôi có cho đến nay:
đầu khối catch: catch\s*\(\s*\w*\s+\w*\s*\)\s*\{.*?
nhưng sau đó tôi không chắc chắn nơi để đi từ đó đến chỉ định không chứa log
. Nếu bạn có ý tưởng về cách làm điều này mà không có regex, điều đó cũng hoàn hảo cho tôi. Cảm ơn
Có thể có thể có các dấu ngoặc lồng nhau trong khối 'catch', phải không? Công cụ regex của PowerGREP không thể xử lý đệ quy (chưa). –
Vâng, có những trường hợp đó. Kể từ khi đăng nhập là không hoàn toàn cần thiết, tôi sẵn sàng bỏ qua những người ngay bây giờ và chỉ nhận được các trường hợp không lồng nhau. – jlars62