[regex] 내로 시작하지 않는 정규식 일치 문자열

PMD의 경우로 시작하는 추악한 변수에 대해 경고하는 규칙을 갖고 싶습니다 my.
이것은로 시작 하지 않는 모든 변수를 허용해야 함을 의미 my합니다.

따라서 다음과 같이 작동하는 RegEx (re)가 필요합니다.

re.match('myVar')       == false
re.match('manager')     == true
re.match('thisIsMyVar') == true
re.match('myOtherVar')  == false
re.match('stuff')       == true

나는 다른 것을 시도했지만 아직 작동하지 않았습니다.



답변

다른 사람들이 제안한 것처럼 미리보기 주장을 사용할 수 있습니다. 또는 기본 정규식 구문을 사용하려는 경우 :

^(.?$|[^m].+|m[^y].*)

이것은 0 또는 1 자 길이 ( ^.?$)의 문자열과 일치 하므로 my. 또는 두 개 이상의 문자가있는 문자열은 첫 번째 문자가 m더 이상 문자 가 아닐 때 ( ^[^m].+); 또는 첫 번째 문자가 a m이면 뒤에 y( ^m[^y])가 올 수 없습니다.


답변

^(?!my)\w+$

작동합니다.

먼저 my문자열의 시작 부분에서 일치 할 수 없는지 확인한 다음 문자열 끝까지 영숫자 문자를 일치시킵니다. 문자열의 아무 곳에 나 공백이 있으면 정규식이 실패합니다. 입력에 따라 정규 표현식에 전달하기 전에 문자열 앞뒤의 공백을 제거하거나 ^\s*(?!my)(\w+)\s*$. 이 경우 역 참조 1에는 변수 이름이 포함됩니다.

그리고 당신은 문자의 특정 그룹과의 변수 이름의 시작은 말할 수 있도록해야하는 경우 [A-Za-z_], 사용

^(?!my)[A-Za-z_]\w*$

에서 +로의 변경 사항 을 확인하십시오 *.


답변

/^(?!my).*/

(?!expression)부정적인 예견입니다. 해당 위치에서 시작하여 일치 expression 하지 않는 위치와 일치합니다 .


답변

허용 할 문자열을 찾기 위해 음수를 일치시키는 것보다 긍정적 인 일치를 수행하고 해당 문자열을 거부하는 것이 훨씬 더 읽기 쉬울까요?

/^my/


답변