[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/