2012-08-05 35 views
353

Tôi đang tìm kiếm để thực hiện tìm kiếm thay thế bằng cụm từ thông dụng trong Sublime Text 2. Số documentation on this khá thiếu máu. Cụ thể, tôi muốn làm một thay thế vào các nhóm, vì vậy cái gì đó như chuyển đổi văn bản này:Tìm kiếm biểu thức chính quy thay thế trong Sublime Text 2

Hello my name is bob

Và thuật ngữ tìm kiếm này:

Find what: my name is (\w)+

Replace with: my name used to be $(1)

Cụm từ tìm kiếm hoạt động tốt nhưng tôi không thể tìm ra cách thực sự thay thế bằng nhóm regexp.

Trả lời

469

Thông thường tham chiếu ngược là $1 hoặc \1 (dấu gạch chéo ngược một) cho nhóm chụp đầu tiên (kết quả khớp đầu tiên của mẫu trong dấu ngoặc đơn). Vì vậy, có lẽ thử:

my name used to be \1 

hoặc

my name used to be $1 

UPDATE: Như nhiều người đã chỉ ra, mô hình chụp ban đầu của bạn là không chính xác và sẽ chỉ chụp bức thư cuối cùng của tên chứ không phải là tên đầy đủ. Bạn nên sử dụng các mô hình sau để nắm bắt tất cả các chữ cái của tên:

my name is (\w+) 
+40

Cả hai đều sẽ hoạt động trong Văn bản tuyệt vời. – furq

+12

ngoại trừ, nó không phải là '$ 0'? –

+8

Không, $ 0 không được sử dụng làm tham chiếu ngược trong cụm từ thông dụng (vì '\ 0' bằng ký tự rỗng và' \ 0ddd' được dùng làm lối thoát cho ký tự có điểm mã ddd). Tuy nhiên, '$ 0' dường như được sử dụng trong Sublime2 như là một" dấu thoát "theo [trang này] (https://sublime-text-unofficial-documentation.readthedocs.org/en/latest/reference/snippets.html ? highlight = $ 0) (mặc dù tôi đang gặp khó khăn khi tìm đủ ví dụ để tìm hiểu chính xác cách dấu thoát được sử dụng trong Sublime2). – Bobulous

92

Bằng cách này, trong câu hỏi trên:

Mục đích:

Hello, my name is bob 

Tìm phần:

my name is (\w)+ 

Với phần thay thế:

my name used to be \1 

Would return:

Hello, my name used to be b 

Thay đổi tìm phần để:

my name is (\w+) 

Và thay thế sẽ là những gì bạn mong đợi:

Hello, my name used to be bob 

Trong khi (\ w) + sẽ phù hợp "bob", nó không phải là nhóm bạn muốn thay thế.

37

Sử dụng() dấu ngoặc đơn trong chuỗi tìm kiếm của bạn

Có một điều quan trọng cần nhấn mạnh!Tất cả các phân đoạn phù hợp phù hợp trong chuỗi tìm kiếm mà bạn muốn sử dụng trong chuỗi thay thế phải là được chấp nhận bởi() dấu ngoặc đơn, nếu không, các phân đoạn phù hợp này sẽ không thể truy cập được với các biến như $ 1, $ 2, .. .nor \ 1, \ 2, .. và vv

VÍ DỤ:

chúng tôi muốn thay thế 'em' với 'px' nhưng giữ gìn các giá trị số:

margin: 10em 
margin: 2em 

Vì vậy, chúng tôi sử dụng số margin: $1px a s chuỗi thay thế.


ĐÚNG: Embrace mong muốn $1 phân khúc phù hợp bởi () ngoặc như sau:

FIND: margin: ([0-9]*)em (Với dấu ngoặc đơn)

REPLACE TO: margin: $1px

KẾT QUẢ:

margin: 10px 
margin: 2px 

SAI: Các mẫu biểu thức chính sau đây sẽ phù hợp với dòng mong muốn nhưng phân khúc phù hợp sẽ không có sẵn trong chuỗi thay thế như biến như $1:

FIND: margin: [0-9]*em (Nếu không có dấu ngoặc đơn)

THAY THẾ ĐỂ: margin: $1px

KẾT QUẢ: ($1 không xác định)

margin: px 
margin: px 
+1

Cảm ơn bạn, câu trả lời này thực sự chỉ ra một thực tế thú vị đã giải quyết được vấn đề của tôi. – Enkk

15

Lưu ý rằng nếu bạn sử dụng hơn 9 nhóm chụp, bạn phải sử dụng cú pháp ${10}.

$10 hoặc \10 hoặc \{10} sẽ không hoạt động.

22

Đây là bản trình bày trực quan về câu trả lời được phê duyệt.

enter image description here

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