文字列内の正規表現の特殊文字をエスケープする方法は?


9

複雑な正規表現を作成していて、ユーザーが表現の一部を指定できます。ただし、ユーザー指定の部分は文字どおりに解釈する必要があります。つまり、正規表現の特殊文字はエスケープする必要があります。これらのキャラクターをエスケープする機能はありますか?当たり前のことのようですが、私のグーグルはすべて失敗しました。

例:

(re-search-forward (format "\b%s\b" user-string))

もしそうなら、私user-stringtest*case一致したいが、そうではtest*caseないtestttttcase

回答:


12

使用できますregexp-quote

この関数は、完全一致のみが文字列である正規表現を返します。ルックアップでこの正規表現を使用すると、バッファ内の次の文字が文字列である場合にのみ成功します。検索対象のテキストに文字列が含まれている場合、検索関数での使用は成功します。

(regexp-quote "^The cat$") => \\^The cat\\$


1
まことにありがとうございます!しかし、なぜこれを見つけるのがそれほど難しいのですか?時々、Emacsのドキュメントは私を狂わせます。
tmalsburg

2
Mx report-emacs-bugを使用して、探したもの、およびこの関数についてどこに期待するかを説明できます。おそらくドキュメントが不足しており、修正する必要があります。
YoungFrog

2
@tmalsburg便利なキーワードは「エスケープ」です。たぶん(defalias 'regexp-escape 'regexp-quote)。これはemacsメーリングリストで議論されましたか?
ebpa 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.