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.
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 に答える