簡體   English   中英

Emacs中的Regexp語言和替換

[英]Regexp languages and replacements in Emacs

當我使用regexp-builder ,我需要以與使用replace-regexp時不同的方式逃避事情。 現在, 這個帖子解釋說這兩個命令使用不同的語法,但為什么呢?

另外,我瀏覽了這篇博文: Re-builder:Interactive Regexp Builder ,我補充道

(require 're-builder) 
(setq reb-re-syntax 'string)

根據網站上的建議訪問我的.emacs文件。 但是,我仍然需要在我的正則表達式周圍鍵入"才能使其正常工作。我認為更改語法語言可以解決這個問題,但事實並非如此。”

有了這個,我的實際問題是:

  1. 是不是Emacs不支持PCRE呢? 這有什么變通方法嗎?
  2. 一旦我在regex-builder中有正確的regexp,有沒有辦法直接將regexp發送到replace-regexp並輸入替換字符串?

關於問題#2:否(至少不是默認情況下),但是如果不使用重建器,還有另一種方法可以做到這一點。

  • 首先為您的模式執行regexp isearch。 因為它是一個isearch,你會以交互方式看到匹配,有點像重建(盡管沒有彩色分組)。

  • 仍然在isearch中,一旦您對模式感到滿意,請鍵入CM-%以調用isearch-query-replace-regexp ,它將提示您進行替換。

你當然可以簡單地從你的緩沖區中復制你的重構字符串並將其作為替換字符串(但這無疑不是新聞)。

我很想知道在使用字符串語法重新構建時需要引號。 似乎是它只是一個系統的形式,和reb-read-regexp返回第一個和最后一個之間的一切"使用該語法時,也許這是為了確保開頭或結尾的空格不能混淆的問題-再建設者確實使用前導空格來提高可見性,並且更難以發現尾隨空格。或者它可能只是使一些代碼更方便/一致。

MELPA存儲庫中有一個名為pcre2el的軟件包,它為Emacs的許多部分添加了PCRE支持,包括regexp-builderreplace-regexp

  1. 不,Emacs不支持PCRE,據我所知,沒有解決方法。
  2. 我不這么認為。

要回答第一個問題,為什么重構器使用與replace-regexp不同的語法:

默認情況下, re-builder使用適合編寫elisp程序的語法。 在書面程序的上下文中,regexps在字符串中輸入。 在字符串內部,反斜杠具有特殊含義,與使用反斜杠作為正則表達式的一部分相沖突。 因此,在字符串中,您需要加倍反斜杠以使用它來表示部分regexp語法。

另一方面, replace-regexp被設計為由用戶以交互方式使用,並且它明確地期望輸入是正則表達式。 為方便起見,它將反斜杠解釋為regexp語法,而不是字符串轉義。 這就是為什么你可以在這種情況下使用單反斜杠。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM