Elisp正規表現^および$ vs `および '


16

マニュアルで、正規表現の特殊文字^について説明してい$ます。私が知っているほとんどの正規表現方言のように、それらは文字列の開始または終了に一致するようです。しかし、私もそこにあることを発見した`'の文字が利用可能。ここにある説明に基づいて、文字列の開始または終了にも一致するようです。誰かがこれらの特殊文字の違いを、それらを使用する場合の例と推奨事項とともに説明していただけますか?

の値を見ると、auto-mode-alist文字列の終わりに一致するように交換可能に使用されているようです:

(...
 ("\\.scss\\'" . scss-mode)
 ("\\.ya?ml$" . yaml-mode)
...)

2
人々$がそのように使用するとき、彼らは改行を含まないファイル名に頼っています。これは通常、(非常に)安全な仮定になりますが、保証されていませ\\'したがって、使用することをお勧めします。
-phils

回答:


14

文字列に改行文字が埋め込まれている場合\'$あります。この場合、文字列の末尾に一致しますが、改行文字の直前に一致します。

Elispマニュアルを引用するには、ノードRegexpスペシャル

バッファではなく文字列と一致する場合、「$」は文字列の末尾または改行文字の前で一致します。

同様に、\`文字列の先頭に^一致しますが、改行文字の直後に一致します。再び、マニュアル:

バッファではなく文字列と一致する場合、「^」は文字列の先頭または改行文字の後に一致します。

したがって、一般的に\`and を使用する文字列の場合\'、特に文字列に改行文字があるかどうかをコードが事前に知ることができない場合は。バッファ内のテキストには、通常とを使用^$ます。


6
(string-match "^foo" "foo")         ; => 0
(string-match "\\`foo" "foo")       ; => 0
(string-match "^foo" "bar\nfoo")    ; => 4
(string-match "\\`foo" "bar\nfoo")  ; => nil

(string-match "foo$" "foo")         ; => 0
(string-match "foo\\'" "foo")       ; => 0
(string-match "foo$" "foo\nbar")    ; => 0
(string-match "foo\\'" "foo\nbar")  ; => nil

^そして$行の開始と終了を一致させます。

\`そして、文字列全体の\'開始と終了に一致します


2
there are ` and ' characters available. [...] they seem to also match the start or end of strings

特殊文字は次のとおり. * + ? ^ $ \ [です。

大括弧の間[]では、以下も特別です:] - ^

バックスラッシュ `および一重引用符 'を含む多くの文字は、バックスラッシュの後に特殊文字になります。詳細はこちらをご覧ください。

Could someone please explain the difference between these special characters, with an example and recommendation on when to use them?

との間beginning of stringに違いがありbeginning of each line in the stringます。

Ergoemacsの厚意による。詳細はこちらをご覧ください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.