正規表現のサポートは後ろ向きと前向きですか?


12

次のような正規表現クエリ置換を実行する必要があります

foofoo bar一致しているが、foo中にはfoo bazありません。通常、私は先​​読みの正規表現を使用しますfoo(?=bar)

しかし、Emacsはこれを行うことができないようですか?Vimは機能しているようですが、spacemacsの悪モードはできません。


これもあります:github.com/gamesun/emacs-regex-lookaroundですが、私はこのパッチを使用してビルドを試みていませんでしたが、しばらく前のようです。
wvxvw

回答:


10

いいえ、Emacs正規表現は任意のゼロ幅先読み/後アサーションをサポートしていません。

nb EvilとSpacemacs(すべてのelispライブラリと同様)は、Emacs Lisp言語の実装に関する質問には関係ありません。


それでは交換fooすることは不可能ではありfoobarませんfoobazか?これはよくある一般的な操作で、解決策が必要だと思いました。おそらく前と後ろを見るのは間違ったアプローチですか?
ハイゼンベルク

これは厳密に等価ではありませんが、交換foo\(bar\)では、baz\1すべてのケースで充分であろうbar、さらにマッチを含んでいませんでした。
フィル、2017年

elispを作成している場合は、柔軟性が高く、インタラクティブに置換する場合は、置換中に任意のelispを呼び出すことができるため、最終的にはこれらの方法を使用できます。これらのアサーションで行うほど便利ではありません。
フィル

例えば:交換fooでは、\,(if (looking-at "bar") "baz" \&)交換いたしますfoobaz、以下のテキストがある場合bar(と置き換えるfoofooそうでない場合)。これは、その後にが続く場合にのみ一致 fooすることと同じではありませんが、bar別のオプションです。
フィル

これはあなたが上で言ったことに似ていると思いますが、次のように入力できるようです。これはあなたが望んでいたものを欠いていますか?
John Kitchin
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.