正規表現の否定予測を使用する方法は?

正規表現の否定予測を使用する方法は?

ホームディレクトリを離れると、プロンプトを変更するためにMacでiTerm2プロファイルトリガーを使用しようとしています。このルールは、私がいるノードのホスト名がある場合にのみ適用されますheadnode。プロンプトには、ホスト名の後の括弧内のコンピュータの場所も含まれます。 ~.

したがって、次のように一致する必要があります。

[jbutryn@headnode (us-west-a) /]$

しかし:

[jbutryn@headnode (us-west-a) ~]$
or
[jbutryn@headnode (us-west-a) ~/tmp]$
etc.

現在、次のように正規表現を作成しています。

\[.*\@headnode.*(?!\~).*].

しかし、これは上記のすべての例と一致します。私が間違っていることを知っている人はいますか?ありがとうございます!

答え1

\[.*\@headnode.*(?!\~).*\]

試合日

  1. [続いて
  2. .*:0個以上の文字で構成されるシーケンス、その後に
  3. @headnode続いて
  4. .*:後に来ないゼロ個以上の文字シーケンス
  5. ~、続いて
  6. .*:0個以上の文字で構成されるシーケンスで、その後には次が続きます。
  7. ]

以下と一致します。

[jbutryn@headnode (us-west-a) ~/tmp]$

その理由は次のとおりです。

<[><jbutryn><@headnode>< (us-west-a) ~/tmp><><]>$
 1  2        3          4                  6  7

次は4そうではありません~

afterの最初の単語の後のように、テキスト内の特定の項目と一致する位置に否定的な予測を配置する必要があります@headnode

\[.*\@headnode \S+ (?!\~).*\]

答え2

退勤するステファンの故障、私は少し異なった解決を提供します。項目4に含まれている内容を停止するシグナルは単一文字幅であるため、シグナル文字を除くすべての文字(この場合は単一文字)を含むクラスを簡単に構成できます。

つまり、#4の正規表現部分を次に置き換えます。

[^~]* 

関連情報