一千萬個為什麽

搜索

從Emacs緩沖區中提取URL?

如何編寫Emacs Lisp函數來查找HTML文件中的所有hrefs並提取所有鏈接?

輸入:

<html>
 StackOverFlow</a>
 

Emacs Lisp

Hacker News</a> </html>

輸出:

http://www.stackoverflow.com|StackOverFlow
http://news.ycombinator.com|Hacker News

我在搜索過程中多次提到過重新搜索轉發功能。根據我目前閱讀的內容,我認為這是我需要做的。

(defun extra-urls (file)
 ...
 (setq buffer (...
 (while
        (re-search-forward "http://" nil t)
        (when (match-string 0)
...
))

最佳答案

如果每行最多只有一個鏈接,並且您不介意某些非常醜陋的正則表達式黑客行為,請在緩沖區中運行以下代碼:

(defun getlinks ()
  (beginning-of-buffer)
  (replace-regexp "^.*]+>\\([^<]+\\).*$" "LINK:\\1|\\2")
  (beginning-of-buffer)
  (replace-regexp "^\\([^L]\\|\\(L[^I]\\)\\|\\(LI[^N]\\)\\|\\(LIN[^K]\\)\\).*$" "")
  (beginning-of-buffer)
  (replace-regexp "
+" "
")
  (beginning-of-buffer)
  (replace-regexp "^LINK:\\(.*\\)$" "\\1")
)

它用LINK:url | description替換所有鏈接,刪除所有包含其他內容的行,刪除空行,最後刪除“LINK:”。

Detailed HOWTO: (1) Correct the bug in your example html file by replacing with , (2) copy the above function into Emacs scratch, (3) hit C-x C-e after the final ")" to load the function, (4) load your example HTML file, (5) execute the function with M-: (getlinks).

請註意,第三個replace-regexp中的換行符很重要。不要縮進這兩行。

轉載註明原文: 從Emacs緩沖區中提取URL?