Phản hồi RegEx trong IntelliJ


129

Tôi muốn sử dụng tính năng tìm và thay thế của IntelliJ để thực hiện chuyển đổi sau:

// Replace this
model.put('foo', 'bar')
// With this
model['foo'] = bar

Tôi đã thử như sau:

Văn bản cần tìm: model.put\((.*),(.*)\) Thay thế bằng:model\[\\1\] = \\2

Nhưng Intellij dường như không nhận ra \\1\\2là phản hồi. Tôi cũng đã thử một dấu gạch chéo, nhưng nó cũng không hoạt động.

Câu trả lời:


196

IntelliJ sử dụng $1cho phản hồi thay thế .

Từ trợ giúp của IntelliJ:

Để biết thêm thông tin về các biểu thức thông thường và cú pháp của chúng, hãy tham khảo tài liệu cho các tham chiếu java.util.regex Back phải có $ n, thay vì định dạng \ n.


15
Có vẻ như "\" là không bắt buộc: jetbrains.com/idea/help/ ,. Ngoài ra, đối với tôi nó chỉ hoạt động nếu tôi bao quanh rõ ràng nhóm của mình bằng "()", nếu không tôi không thể tham chiếu nó sau này. Ví dụ: tìm kiếm (foo)thay thế:$1bar
Ghedeon

@Ghedeon: Có lẽ bạn nên thêm nhận xét của mình dưới dạng câu trả lời hoặc câu trả lời hiện có. Đề xuất của bạn để đặt biểu thức trong () là những gì làm việc cho tôi.
đọc tâm trí

+1 chút thông tin mà giải quyết vấn đề có liên quan của tôi: Tôi đang thay thế quote-cộng với hàm bao quanh biến với wrappers đô la-xoăn, ví dụ, '+ var +'để ${var}trong một số mẫu dây và không thể tìm ra lý do tại sao IntelliJ sẽ không hoàn thành việc thay thế. Hóa ra $cần phải được trốn thoát trong sự thay thế.
worc

13

Nói tóm lại, bạn phải sử dụng $1để $ncho thay backreferences. \1cú pháp chỉ dành cho phản hồi trong tìm kiếm.

Trong IntelliJ 2016, tài liệu trong ứng dụng bị sai lệch. Đây là một trích dẫn tốt hơn từ các tài liệu đầy đủ:

Nếu bạn cần tham chiếu chuỗi con phù hợp ở đâu đó bên ngoài biểu thức chính quy hiện tại (ví dụ: trong một biểu thức chính quy khác dưới dạng chuỗi thay thế), bạn có thể truy xuất chuỗi đó bằng ký hiệu đô la ($ num, trong đó num = 1..n).

Nguồn: Cú pháp biểu thức chính quy 2016.1, Mẹo & Thủ thuật


2

Trợ giúp theo ngữ cảnh trong sản phẩm cho regex trong Idea 9.0 (và có lẽ các phiên bản khác) dường như không chính xác. Nó nói rằng:

  Tham khảo lại
  \ n
  Dù nhóm bắt thứ n phù hợp với điều gì

Nhưng rõ ràng, như đã đề cập trong các câu trả lời trước đây và là kinh nghiệm của tôi, nó thực sự là \ $ ​​n cho các tham chiếu trở lại, thay vì \ n

Bạn nhận được trợ giúp theo ngữ cảnh này bằng cách nhấp vào liên kết '[Trợ giúp]' bên cạnh tùy chọn radio "Biểu thức chính quy" trên hộp thoại "Thay thế văn bản"


0

IntelliJ IDEA / Tài liệu tham khảo / Tham chiếu cú ​​pháp biểu thức chính quy


Kết hợp phụ và ghi nhớ trận đấu. Nếu bạn cần sử dụng chuỗi con phù hợp trong cùng một biểu thức chính quy, bạn có thể truy xuất chuỗi đó bằng cách sử dụng độ phản hồi (\ num, trong đó num = 1..n). Nếu bạn cần tham chiếu chuỗi con phù hợp ở đâu đó bên ngoài biểu thức chính quy hiện tại (ví dụ: trong một biểu thức chính quy khác trong trường Thay thế), bạn có thể truy xuất chuỗi đó bằng ký hiệu đô la ($ num, trong đó num = 1..n). Nếu bạn cần đưa các ký tự dấu ngoặc đơn vào biểu thức con, hãy sử dụng "(" hoặc ")".


Tôi tìm thấy điều tương tự ở đây ; tuy nhiên, cuối cùng tôi đã thành công khi sử dụng $ 1, không có dấu gạch chéo ngược.
Joe Tricarico
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.