2010-07-02 31 views
45

Tôi muốn tìm kiếm nhiều file thông qua nhật thực cho 2 dòng sau:Làm cách nào để tìm kiếm và thay thế 2 dòng (cùng nhau) qua nhật thực?

@Length(max = L_255) 
private String description; 

và thay thế bằng hai:

@Length(max = L_255, message="{validator.description.len}") 
private String description; 
+1

tạo dòng làm mã để cho biết rằng nó nằm trên 2 dòng. CTRL + H không cho phép tôi thêm 2 dòng để tìm kiếm và thay thế – Sam

Trả lời

36

tìm kiếm là đa dòng theo mặc định trong Eclipse khi bạn đang sử dụng regex:

(\@Length\(max = L_255)\)([\r\n\s]+private) 

Tôi muốn thêm "private String mô tả;"

(\@Length\(max = L_255)\)([\r\n\s]+private\s+?String\s+description\s*?;) 

thay thế bằng:

\1, message="{validator.description.len}")\2 

Nó hoạt động hoàn hảo trong một File Search kích hoạt bởi một CTRL - H.

Eclipse multi-line search

Như đã đề cập trong Tika 's answer, bạn có thể sao chép trực tiếp hai dòng được chọn trong 'containing text': những dòng sẽ chuyển đổi như một regexp cho bạn bằng cách Eclipse.

+0

Tôi muốn thêm "mô tả chuỗi riêng tư"; cũng như một phần của tìm kiếm của tôi vì dòng @Length (max = L_255) cũng xuất hiện cho các trường khác như "Tên chuỗi riêng". Vì vậy, đề xuất trên sẽ không hoạt động. – Sam

+0

Tôi đang cố gắng tìm kiếm nhiều dòng liên tiếp. – Sam

+1

@Samuel: hình ảnh được thêm vào, câu trả lời được cập nhật để đưa toàn bộ dòng của bạn vào tài khoản. Nó sẽ làm việc cho nhiều dòng liên tiếp. Hãy thử một lần. – VonC

0

Chọn thư mục chứa tất cả các file của bạn và bấm Ctrl + H.

+0

không, CTRL + H không nhận 2 dòng, đó là vấn đề của tôi – Sam

+0

Thực hiện các dòng riêng rẽ? Hoặc thử một biểu thức chính quy nhiều dòng. –

+0

Tôi không thể làm điều đó một cách riêng biệt vì nó có thể ảnh hưởng đến các trường khác. Tôi đã không thể tìm ra biểu thức đa dòng sẽ xác định chính xác 2 dòng trên, do đó là câu hỏi. – Sam

49

Một mẹo khác về cách lấy regex cho một khối đã chọn. Mở một trong các tệp có chứa nhiều dòng (nhiều dòng) để tìm kiếm hoặc thay thế. Nhấp vào Ctrl + F và chọn "Cụm từ thông dụng". Đóng cửa sổ Tìm/Thay thế. Chọn khối bạn cần và nhấp lại Ctrl + F để mở cửa sổ Tìm/thay thế. Bây giờ trong hộp Tìm văn bản, bạn có cụm từ thông dụng khớp chính xác với khối lựa chọn của bạn.

(tôi phát hiện này, chỉ sau khi tạo bằng tay một regexp cho khối rất dài :)

+0

rất tốt! Cám ơn! +1 –

+0

Mẹo tuyệt vời! Cảm ơn, bạn đã tiết kiệm cho tôi rất nhiều thời gian để tìm cách xây dựng regex của tôi. – Anth0

+1

Bạn có thể sử dụng thủ thuật này để xây dựng regex để sao chép vào tìm kiếm tệp. Tiết kiệm thời gian rất lớn, cảm ơn bạn! – nerdherd

14

CTRL + H không mất hai dòng nếu bạn sử dụng regexp (và bạn không cần phải viết regexp một mình, nhật thực hiện điều đó cho bạn).

  1. Chọn dòng của bạn.
  2. Nhấp CTRL + H. Hộp thoại tìm kiếm mở ra. Nếu "Regular expression" đã được kiểm tra, nhật thực sẽ chuyển đổi hai dòng bạn tìm kiếm thành regexp cho bạn, nhấp vào Tìm kiếm. Nếu "Cụm từ thông dụng" nếu chưa được chọn ", hãy kiểm tra và nhấp vào Hủy (nhật thực nhớ lại choise của bạn)."
  3. Chọn lại các dòng của bạn
  4. Nhấp vào CTRL + H Hộp thoại tìm kiếm mở ra. biểu thức "đã được chọn.nhật thực sẽ chuyển đổi hai dòng bạn tìm kiếm thành regexp cho bạn, nhấp vào Tìm kiếm.
+2

Tôi thích mô tả của bạn về giải pháp tốt nhất, đơn giản và nhanh chóng và dễ sử dụng. Thnx! – Daren

+0

Dòng thứ hai là tính năng đá quý ẩn..Thanksss – nick

2

Một mẹo nhanh cho bao gồm nhiều dòng như một phần của một biểu thức chính quy bằng tay xây dựng:

đâu bạn thường sử dụng .* để phù hợp với bất kỳ ký tự không hay nhiều lần, thay vì xem xét sử dụng một cái gì đó giống như (?:.|\r?\n)*. Hoặc đặt thêm ? vào cuối để làm cho nó không tham lam.

Giải thích: . không phù hợp với dây chuyền mới nên cần phải làm một "một trong hai-hay": Các dấu ngoặc đơn phù hợp với một trong hai . trước ống hoặc dòng mới sau khi nó. Các ? sau \r làm cho việc vận chuyển trở lại trước khi dòng nguồn cấp dữ liệu tùy chọn để cho phép Windows hoặc Unix dòng mới. Các ?: loại trừ toàn bộ điều như là một nhóm chụp (giúp tránh một tràn ngăn xếp).

+0

Khi tôi thử điều này trong Eclipse (4.5) là: 'publisher (?:. | \ R? \ N) *' nó hiển thị lỗi trong hộp thoại "Tìm mẫu quá phức tạp" Chỉnh sửa: thêm dấu chấm hỏi vào cuối là: 'publisher (?:. | \ R? \ N) *?' Làm cho nó hoạt động! Cảm ơn lời khuyên và lời giải thích regex. – NathanChristie

+1

Có một số trường hợp nếu tôi thêm quá nhiều ký tự vào từ thứ hai tôi muốn tìm kiếm, tôi vẫn thấy lỗi "Tìm mẫu quá phức tạp". Vì vậy, 'nhà xuất bản (?:. | \ R? \ N) *? Id' hoạt động nhưng' publisher (?:. | \ R? \ N) *? Identity' hiển thị lỗi – NathanChristie

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