2009-09-03 44 views
101

Trong nhật thực, có thể sử dụng chuỗi tìm kiếm phù hợp như một phần của chuỗi thay thế khi thực hiện tìm kiếm biểu thức chính quy và thay thế không?Eclipse, tìm kiếm biểu thức chính quy và thay thế

Về cơ bản, tôi muốn thay thế tất cả các lần xuất hiện của

variableName.someMethod() 

với:

((TypeName)variableName.someMethod()) 

đâu variableName thể được bất kỳ tên biến ở tất cả.

Trong sed tôi có thể sử dụng một cái gì đó như:

s/[a-zA-Z]+\.someMethod\(\)/((TypeName)&)/g 

Đó là, & đại diện cho chuỗi tìm kiếm phù hợp. Có cái gì đó tương tự trong Eclipse?

Cảm ơn!

+0

Tài liệu tốt về Eclipse RegEx: http://help.eclipse.org/kepler/index.jsp?topic=%2Forg.eclipse.jubula.client.ua.help%2Fhtml%2Freference%2Fnode4.html –

Trả lời

201

Có, "()" chụp một nhóm. bạn có thể sử dụng nó một lần nữa với $ i, nơi tôi là nhóm chụp thứ i.

vậy:

search: (\w+\.someMethod\(\)) 
replace: ((TypeName)$1) 

gợi ý: CTRL + không gian trong hộp văn bản cung cấp cho bạn tất cả các loại gợi ý cho biểu thức chính quy bằng văn bản. (Tôi sợ phím xuống, để xóa danh sách các đề xuất, xóa đầu vào của bạn trong hộp văn bản. Khó chịu ít lỗi)

+1

không làm việc cho moi :( – kellogs

+12

Câu trả lời hay, đặc biệt là gợi ý là một điểm bổ sung đáng giá :) –

+0

Đó là một câu trả lời hay và gợi ý hữu ích. Nó sẽ hữu ích hơn nếu nó được mô tả chi tiết hơn một chút. – iammilind

2

Ít nhất tại các nhóm STS (SpringSource Tool Suite) được đánh số bắt đầu từ 0, vì vậy chuỗi thay thế sẽ là

replace: ((TypeName)$0) 
+5

Đó không phải là sự thật. $ 0 đại diện cho toàn bộ từ tìm kiếm gốc. Trong trường hợp này tôi đoán rằng sẽ làm việc tình cờ mặc dù. –

0

Để ai đó cần giải thích và ví dụ về cách sử dụng regx trên nhật thực, hy vọng điều này sẽ hữu ích. Đây là vấn đề của tôi.

enter image description here

Tôi muốn đổi tên

/download.mp4^lecture_id=271 

để

/271.mp4 

Và có thể có nhiều trong số này.

Cách bạn nên thực hiện việc này.

enter image description here

Sau đó nhấn find/nút

6

Sử dụng thay thế ...
search = (^. * Nhập khẩu) (. *) (\ (. * \) :)
thay thế = $ 1 $ 2

... thay thế ...

from checks import checklist(_list): 

... với ...

from checks import checklist 



Blocks trong regex được mô tả bởi ngoặc (mà không được đi trước bởi một "\")

(^. * nhập) tìm thấy "từ kiểm tra nhập khẩu" và tải nó đến $ 1 (nhật thực bắt đầu đếm tại 1)

(. *) tìm tiếp theo "mọi thứ" cho đến lần kế tiếp tered "(" và tải nó lên $ 2. $ 2 dừng tại "(" vì phần tiếp theo (xem dòng tiếp theo bên dưới)

(\ (. * \) :) nói "tại lần gặp đầu tiên" ("sau khi bắt đầu khối $ 2 ... dừng chặn $ 2 và bắt đầu $ 3. $ 3 được tải bằng "('bất kỳ văn bản'):" hoặc, trong ví dụ, "(_list):"

Sau đó, thay thế, chỉ cần đặt $ 1 $ 2 để thay thế tất cả ba khối chỉ với hai người đầu tiên.



Screenshot

2

NomeN đã trả lời một cách chính xác, nhưng một này swer sẽ không được sử dụng nhiều cho người mới bắt đầu như tôi bởi vì chúng tôi sẽ có một vấn đề khác để giải quyết và chúng tôi sẽ không biết làm thế nào để sử dụng RegEx trong đó. Vì vậy, tôi đang thêm một chút giải thích cho điều này. Câu trả lời là

tìm kiếm: (\ w + \ someMethod \ (\).)

thay thế: ((TypeName) $ 1)

đây:

Trong tìm kiếm:

  • Đầu tiên và cuối cùng '(' ')' mô tả một nhóm trong regex

  • '\ w' miêu tả từ (chữ + dấu gạch dưới)

  • '+' miêu tả một hoặc nhiều (ví dụ một hoặc nhiều chữ và số + gạch dưới)

  • '' là một ký tự đặc biệt mô tả bất kỳ ký tự nào (ví dụ: + có nghĩa là một hoặc nhiều ký tự bất kỳ). Bởi vì đây là một ký tự đặc biệt để mô tả '.' chúng ta nên cho một nhân vật trốn thoát với nó, tức là '.'

  • 'someMethod' được cung cấp vì nó được tìm kiếm.

  • Hai ngoặc '(', ')' được trao cùng với thoát nhân vật vì họ được ký tự đặc biệt được sử dụng để miêu tả một nhóm (chúng tôi sẽ thảo luận về nhóm ở điểm tiếp theo)

Trong thay thế:

  • Nó được đưa ra '((TypeName) $ 1)', đây $ 1 mô tả nhóm . Đó là tất cả các ký tự được kèm theo trong ngoặc đầu tiên và cuối cùng '(', ')' trong lĩnh vực tìm kiếm

  • Ngoài ra hãy chắc chắn rằng bạn đã kiểm tra tùy chọn 'biểu hiện thường xuyên trong tìm thấy một hộp

    thay thế

Thông tin thêm về RegEx có thể được tìm thấy trong http://regexr.com/.

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