Làm cách nào tôi có thể thực hành tìm kiếm và thay thế bằng các biểu thức thông thường tương tác trong Emacs?


12

Tìm kiếm và thay thế bằng các biểu thức thông thường rõ ràng là một công cụ mạnh mẽ cho người dùng Emacs có thể thường xuyên thực hiện các hành động này. Tuy nhiên, là người mới bắt đầu Emacs (và / hoặc lập trình), các biểu thức chính quy cần phải được học và thực hành.

Tôi có thể học và huấn luyện các biểu thức chính quy tương tác trong Emacs, tương tự như hướng dẫn Emacs tích hợp không? Nếu không, các đề xuất khác để sử dụng Emacs để thực hành sử dụng các biểu thức thông thường để tìm kiếm và thay thế là gì?


1
Tài liệu này khá hoàn chỉnh: wikemacs.org/wiki/Regapi
Ehvince

Câu trả lời:


17

Bên cạnh đó, regexp-builderbạn cũng có thể xem xét regrec trực quan để cung cấp cho bạn thông tin phản hồi trực quan về tiến trình thay thế:

ảnh chụp nhanh


3
Hoặc thậm chí anzu, mà làm như vậy và nhiều hơn nữa.
sanityinc

16

Bạn có thể thử trình M-x regexp-builder RETkết hợp biểu thức chính quy tương tác, điều đó không tệ


7
Đừng hoảng sợ khi C-gkhông thoát ra như bạn mong đợi. C-c C-qlà liên kết phím mặc định để thoát khỏi trình xây dựng regrec khi bạn thực hành xong.
nispio

5

Tôi sử dụng regexp-builderđể cho phép bạn kiểm tra biểu thức tương tác và nhận phản hồi. Và tất nhiên, một khi tôi bắt đầu sử dụng nó, tôi lập tức tự hỏi mình "Làm thế nào để tôi đưa regrec này vào query-replace-regexp?"

Câu trả lời tôi chọn là chức năng sau được xác định trên trang EmacsWiki ReBuilder .

(defun reb-query-replace (to-string)
  "Replace current RE from point with `query-replace-regexp'."
  (interactive
   (progn (barf-if-buffer-read-only)
          (list (query-replace-read-to (reb-target-binding reb-regexp)
                                       "Query replace"  t))))
  (with-current-buffer reb-target-buffer
    (query-replace-regexp (reb-target-binding reb-regexp) to-string)))

Vì vậy, quy trình làm việc của tôi là:

  1. M-x re-builder
  2. loại loại
  3. M-x reb-query-replace

3

Nó có thể là một trợ giúp to lớn khi học cách sử dụng biểu thức chính quy để xem phần nào khớp với phần nào của biểu thức chính quy - cụ thể là các nhóm biểu thức chính quy. Và để làm điều đó một cách tương tác và tăng dần.

Dọc theo dòng câu trả lời của @ imerr, tìm kiếm của Icicles đã có phần nổi bật tương tự trong một thời gian dài.

nhập mô tả hình ảnh ở đây



1

Không phải trong emacs, nhưng http://rubular.com/ về cơ bản là regexp-buildervới một cheat-sheet. Bạn có thể thiết lập một ví dụ và yêu cầu nó đưa ra một liên kết đến ví dụ đó. Tôi sử dụng điều này khi thảo luận về regex với một nhóm.


1
Ruby có sử dụng Regac có hương vị emacs không?
nispio

1

Thay thế cho Dave F, regexp-builderbạn cũng có thể tạo văn bản tùy ý để thực hành khớp mẫu.

Tính năng hữu ích nhất của lệnh này là nó sẽ làm nổi bật các kết quả khớp trong bộ đệm khi mẫu được tạo để hỗ trợ bạn trong việc đảm bảo khớp mẫu phù hợp.

Sử dụng (query-replace-regexp)( C-M-%) và tạo một biểu thức chính quy để thực hiện thay thế bạn muốn sẽ giúp bạn thực hành.


Điều này mang lại lợi ích gì cho người muốn "thực hành" các biểu thức thông thường regexp-builderchưa cung cấp? Vấn đề với query-replace-regexplà bạn cần phải viết toàn bộ biểu thức chính quy và sau đó cam kết với nó để tìm ra những gì nó phù hợp. Nếu bạn không thích kết quả, bạn phải bắt đầu lại. regexp-builderhiển thị các trận đấu một cách nhanh chóng giúp điều chỉnh regrec của bạn dễ dàng hơn cho đến khi nó hoạt động nếu bạn không biết bạn đang làm gì.
nispio

1
Tôi thừa nhận đó là nhược điểm của nó. Tuy nhiên, nếu bạn quen thuộc với các biểu thức thông thường sử dụng query-replace-regexpsẽ giúp bạn quen với việc sử dụng nó trong Emacs một cách cụ thể
Jonathan Leech-Pepin

Có lẽ ... nhưng nó dường như không khớp với những gì OP đang yêu cầu. "Nếu bạn quen thuộc với các biểu thức thông thường", thì bạn thực sự không cần phải học các biểu thức chính quy.
nispio

1
OP đang hỏi làm thế nào để tìm hiểu làm thế nào / khi nào sử dụng chúng một cách tương tác như một người mới bắt đầu Emacs. Họ có thể đã có một số kiến ​​thức regex từ các loại regrec khác.
Jonathan Leech-Pepin
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.