2

For example, I have a string abcdefg. * , how can I create a regexp [abcdefg\. *] that can match each character in the string? The problem is that there could be special characters such as . in the string.

4

3 に答える 3

6

シンプルで堅牢なソリューションは、組み込みregexp-opt関数を使用することです。この関数は、固定文字列のリストを取得し、それらのいずれかに一致する効率的な正規表現を返します。あとは、元の文字列を 1 文字のセグメントに分割するだけです。

(regexp-opt
 (mapcar #'char-to-string
         (string-to-list "abcdefg. *"))) ; => "[ *.a-g]"
于 2013-04-29T19:49:03.093 に答える
4

機能を使用してくださいregexp-quote

(setq regexp (concat "[" (regexp-quote string) "]"));

ほとんどの正規表現文字は、角括弧内に特別な意味を持たないため、引用符で囲む必要がないことに注意してください。文字セット内に特定の特殊文字を含めることに関する Emacs のドキュメントは次のとおりです。

通常の正規表現の特殊文字は、文字セット内では特別ではないことに注意してください。文字セット内には、']'、'-'、'^' というまったく異なる特殊文字のセットが存在します。

文字セットに「]」を含めるには、それを最初の文字にする必要があります。たとえば、'[]a]' は ']' または 'a' に一致します。「-」を含めるには、「-」をセットの最初または最後の文字として書くか、範囲の後に置きます。したがって、'[]-]' は ']' と '-' の両方に一致します。

セットに '^' を含めるには、セットの先頭以外の任意の場所に配置します。(最初は、セットを補完します。以下を参照してください。)

于 2013-04-29T17:38:04.863 に答える