4

Emacs の「replace-match」関数の説明を読むと、「subexpression」属性とは何か、またどのように使用すればよいのかわかりません。たとえば (replace-match (format-time-string writestamp-format (current-time)) t t nil 1) 、「1」はどういう意味ですか?!

4

2 に答える 2

3

マニュアルから:

subexp が非 nil である場合、一致した正規表現全体ではなく、一致した正規表現の部分式番号 subexp のみを置き換えることを意味します。たとえば、'foo (ba*r)' に一致した後、subexp として 1 を指定して replace-match を呼び出すと、'(ba*r)' に一致したテキストだけを置き換えることを意味します。

この機能を理解するには、まず正規表現の部分表現を理解する必要があります。正規表現の一部を中かっこで区切ることにより、グループ化してからそれらのグループにアクセスできます。これは、query-replace-regex. これは、ここで機能する方法です。

bar(SOMETHING)すべての出現をで置き換えたいと想像してくださいfoo(SOMETHING)。したがって、最初に一致するのはbar(\([^)]*\))(これは、以外のすべての文字)が括弧内で許可され、最初の部分式が と の間で一致するすべてであることを\(意味し\)ます。

于 2012-07-22T16:03:40.580 に答える
1

「emacs subexpression」をグーグルで検索したところ、最初のヒットで次のように説明されました。

正規表現の部分表現は、エスケープされた括弧 '\(...\)' でグループ化された表現であることを思い出してください。count 番目の部分式は、正規表現全体の先頭から '\(' の出現回数を数えることによって検出されます。最初の部分式には 1、2 番目には 2 というように番号が付けられます。

たとえば、 の正規表現検索を実行すると\([a-z]+\) \([0-9]+\)、最初の部分式にその[a-z]+部分が含まれ、2 番目の部分式にその部分が含まれます[0-9]+

于 2012-07-22T16:03:29.520 に答える