web-dev-qa-db-ja.com

バッファではなく文字列での正規表現検索を省略

正規表現で文字列を検索する方法については、emacsLISPのドキュメントのいたるところを検索しています。私が見つけたのは、バッファでこれを行う方法だけです。

足りないものはありますか?文字列を一時バッファに吐き出し、そこで検索する必要がありますか?これは、私が慣れ親しんでいるelispのコーディングスタイルにすぎませんか?この問題に対する標準的な解決策はありますか?すでに存在する変数を直接検索できるはずなのに、バッファーの操作は扱いにくいようです。

41
Eli

Emacs wikiの文字列コンテンツとバッファコンテンツの説明です。 文字列を変数として保存するだけです。

トリッキーなこと 文字列について は、通常、文字列自体を変更しないことです(文字列は配列であるため、文字列に対して配列関数を実行する場合を除きますが、これは通常回避する必要があります)が、変更された文字列。

とにかく、これはelispで文字列を使用する例です。

これにより、文字列の末尾から空白が削除されます。

(setq test-str "abcdefg  ")
(when (string-match "[ \t]*$" test-str)
    (message (concat "[" (replace-match "" nil nil test-str) "]")))
28
Peter Ajtai

あなたが探している関数はstring-match。マッチングを繰り返し行う必要がある場合は、返されるインデックスを次の呼び出しのオプションの「開始」パラメータとして使用します。ドキュメントはELispマニュアルの「正規表現検索」の章にあります。

13
Thomas Kappler

文字列内のすべての正規表現の一致を置き換えるには、replace-regexp-in-stringを確認してください。

3
egdmitry

文字列の先頭を検索するには

(defun string-starts-with-p (string prefix)
    "Return t if STRING starts with PREFIX."
    (and
     (string-match (rx-to-string `(: bos ,prefix) t)
                   string)
     t))

文字列の末尾を検索するには

(defun string-ends-with-p (string suffix)
  "Return t if STRING ends with SUFFIX."
  (and (string-match (rx-to-string `(: ,suffix eos) t)
                     string)
       t))
1
yPhil