Regular-Expression
如何使用正則表達式負前瞻?
如果我離開我的主目錄,我正在嘗試在我的 mac 上使用 iTerm2 配置文件觸發器來更改提示。只有當我所在的節點的主機名為
headnode
. 提示還將在主機名後面的括號中包含機器的位置。我正在嘗試建構一個匹配任何目錄的正則表達式,除非它包含~
.所以它應該匹配:
[jbutryn@headnode (us-west-a) /]$
但不是:
[jbutryn@headnode (us-west-a) ~]$ or [jbutryn@headnode (us-west-a) ~/tmp]$ etc.
目前我正在像這樣建構我的正則表達式:
\[.*\@headnode.*(?!\~).*].
但這與上面的所有範例都匹配。有誰知道我做錯了什麼?謝謝!
\[.*\@headnode.*(?!\~).*\]
比賽開始
[
其次是.*
: 0 個或多個字元的序列,後跟@headnode
其次是.*
: 0 個或多個字元的序列,後面不跟~
, 其次是.*
: 0 個或多個字元的序列,後跟:]
它確實匹配:
[jbutryn@headnode (us-west-a) ~/tmp]$
因為那是:
<[><jbutryn><@headnode>< (us-west-a) ~/tmp><><]>$ 1 2 3 4 6 7
接下來
4
的不是~
。您需要將否定前瞻放在與文本中特定內容匹配的位置,例如 after 第一個單詞之後
@headnode
:\[.*\@headnode \S+ (?!\~).*\]