Emacs の「replace-match」関数の説明を読むと、「subexpression」属性とは何か、またどのように使用すればよいのかわかりません。たとえば
(replace-match (format-time-string writestamp-format (current-time)) t t nil 1)
、「1」はどういう意味ですか?!
2 に答える
マニュアルから:
subexp が非 nil である場合、一致した正規表現全体ではなく、一致した正規表現の部分式番号 subexp のみを置き換えることを意味します。たとえば、'foo (ba*r)' に一致した後、subexp として 1 を指定して replace-match を呼び出すと、'(ba*r)' に一致したテキストだけを置き換えることを意味します。
この機能を理解するには、まず正規表現の部分表現を理解する必要があります。正規表現の一部を中かっこで区切ることにより、グループ化してからそれらのグループにアクセスできます。これは、query-replace-regex
. これは、ここで機能する方法です。
bar(SOMETHING)
すべての出現をで置き換えたいと想像してくださいfoo(SOMETHING)
。したがって、最初に一致するのはbar(\([^)]*\))
(これは、以外のすべての文字)
が括弧内で許可され、最初の部分式が と の間で一致するすべてであることを\(
意味し\)
ます。
「emacs subexpression」をグーグルで検索したところ、最初のヒットで次のように説明されました。
正規表現の部分表現は、エスケープされた括弧 '\(...\)' でグループ化された表現であることを思い出してください。count 番目の部分式は、正規表現全体の先頭から '\(' の出現回数を数えることによって検出されます。最初の部分式には 1、2 番目には 2 というように番号が付けられます。
たとえば、 の正規表現検索を実行すると\([a-z]+\) \([0-9]+\)
、最初の部分式にその[a-z]+
部分が含まれ、2 番目の部分式にその部分が含まれます[0-9]+
。