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


89

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

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


1
나는 그것이 실제로 부정적 시각이어야한다고 생각합니다 (부정적 시각이 아닙니다).
Indrit 2011 년

답변:


43

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

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

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


이것은 우리가 지금 사용할 수있는 것입니다. 확장 정규식에 문제가있는 것 같지만 현재로서는 잘 작동합니다.
Dominik Sandjaja

165
^(?!my)\w+$

작동합니다.

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

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

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

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


59
/^(?!my).*/

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


7

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

/^my/

4
그것은 더 쉬울 것이지만 저장소에 커밋 할 때 코드를 확인하는 규칙에 필요했기 때문에 논리를 "되돌릴"수 없었습니다.
Dominik Sandjaja 2011 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.