2010-01-22 2 views
47

PMD의 경우 해당 문자로 시작하는 추악한 변수에 대해 경고하는 규칙을 갖고 싶습니다. 이것은 my로 시작하지 않는 모든 변수를 받아 들여야 함을 의미합니다. 그러나 천국 '(죄송합니다, 그들에 액세스 지금, 여기에 나중에 나열합니다) 내가 다른 사람을 시도했습니다RegExp 일치하는 문자열이 내 문자로 시작하지 않습니다

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

:

그래서, 나는 다음과 같이 동작 정규식 (재) 필요 아직 작동하지 않습니다.

+1

나는 실제로 그것이 부정적인 시각을 가져야한다고 생각한다. – Indrit

답변

31

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

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

my 수 없습니다, 따라서 (^.?$) 긴 중 0 또는 1 문자입니다 문자열과 일치합니다. 또는 두 개 이상의 문자가있는 문자열은 첫 문자가 m이 아닐 때 더 이상 문자가 올 수 있습니다 (^[^m].+); 또는 첫 번째 문자가 m 인 경우 뒤에 y (^m[^y])을 붙여서는 안됩니다.

+0

이것은 우리가 지금 사용할 수있는 것입니다. 확장 된 regexp에 문제가있는 것처럼 보이지만, 지금은 정상적으로 작동합니다. –

103
^(?!my)\w+$ 

.

먼저 문자열의 시작 부분에 my을 일치시킬 수 없도록 확인한 다음 영숫자를 문자열 끝까지 일치시킵니다. 공백을 사용하면 정규 표현식이 실패합니다. 입력에 따라 정규 표현식에 전달하기 전에 문자열 앞뒤의 공백을 제거하거나 공백에 임의 공백 대체를 사용하여 ^\s*(?!my)(\w+)\s*$과 같은 정규 표현식을 추가 할 수 있습니다. 이 경우 역 참조 1에는 변수의 이름이 포함됩니다. 당신이 당신의 변수 이름은 문자의 특정 그룹으로 시작되도록해야하는 경우

는 그리고, +에서 *

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

주에게 변화를 사용 [A-Za-z_]을 말한다.

34
/^(?!my).*/ 

은 부정적인 미리보기입니다. 해당 위치에서 expression이 일치하지 않는 위치가과 일치합니다.

5

긍정적 인 일치를 수행하고 해당 문자열을 거부하는 것이 훨씬 더 읽기 쉽지 않을까요? 음수와 일치하는 문자열을 찾아야합니다.

/^my/ 
+2

더 쉬울 것이지만 저장소로 커밋 할 때 코드를 검사하는 규칙에 필요하기 때문에 논리가 "되돌릴"수 없습니다. –

관련 문제