정규식 부정 예측을 사용하는 방법은 무엇입니까?

정규식 부정 예측을 사용하는 방법은 무엇입니까?

홈 디렉토리를 떠날 때 프롬프트를 변경하기 위해 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. .*: 뒤에 오지 않는 0개 이상의 문자 시퀀스
  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의 정규식 부분을 다음으로 바꿉니다.

[^~]* 

관련 정보