TextMateの正規表現でNOTを使用することはできますか?


22

OSXエディターTextMateで作業しているMatlabプロジェクトがあります。特定の単語のすべてのインスタンスを見つける必要があります。たとえば、「foo」で、「。」が前に付かないものとします。または「/」で成功しました。

ただし、このように否定的に定義されている正規表現を検索する方法は見つかりません。「Aの前にB以外の何か」のようなものを検索できるかどうか誰もが知っていますか?

(TextMateはK. Kosakoによる鬼車正規表現ライブラリを使用しています。)

回答:


31

次の構文のビットを使用します。

(?=subexp)         look-ahead
(?!subexp)         negative look-ahead
(?<=subexp)        look-behind
(?<!subexp)        negative look-behind

あなたの場合、 (?<!\.)foo(?!/)


1
驚くばかり!私はドキュメントでそれらを見落としていました。ありがとう:)
ナーゲル

これはfoo、テキストの先頭または末尾にある単語の出現も考慮に入れた素晴らしいソリューションです。
simhumileco

13

角括弧内の^(サーカムフレックスまたはキャレット)は、式を否定します。そのため、「。」が前にない「foo」を見つけるには だろう:

[^.]foo

(^|[^.])(foo)また、1つの余分な文字に一致する必要があります。
ctrl-alt-delor

ありがとう、ブライアン!これは最初に試したバリアントですが、構文を台無しにして[^ \。]の代わりに^ [\。]を試しました:P
Nagel

1
これは機能しません。「。」以外のすべての文字が必要です 「任意の文字」を意味します。エスケープする必要があります:(^ | [^ \。])(foo)
アンドラスギョムリー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.