regexp : String 'string'을 검색 할 수는 있지만 'string ({')이 아닙니다.

StackOverflow https://stackoverflow.com/questions/2040923

  •  19-09-2019
  •  | 
  •  

문제

디렉토리의 모든 파일에서 콘크리트 단어 (더 이상 API를 사용한 메소드 호출)의 모든 발생을 찾으려고 노력하고 있습니다. 업데이트 된 통화 (새 API)가 포함되지 않은 모든 발생을 찾으려면 Regexp가 필요합니다. 도와 줄수있으세요?

예시:

  • 더 이상 API : 메소드 (A, B, C)
  • 새 API : 메소드 ({a : a, b : b, c : c})

regexp는 '메소드'가 포함 된 모든 파일을 찾아야하지만 '메소드 ({')를 찾아야합니다.

고맙습니다.

도움이 되었습니까?

해결책

적절한 방법은 부정적인 외관 연산자를 사용하는 것입니다. ?!

/method(?!\(\{)/

위의 상태, "모든 발생 method 그건 ~ 아니다 그 뒤에 ({"

제안 된 것보다 요구 사항을 더 잘 충족시킵니다 /method([^{]/ 후자는 문자열 끝과 일치하지 않기 때문에 (예 : abc abc method) 그리고 그것은 두 문자의 조합을 처리하지 않습니다. ({ 당신이 아주 잘 요청했습니다.

다른 팁

betelgeuse:tmp james$ echo " method(a,b,c) "> test1
betelgeuse:tmp james$ echo " method(a,b,c) " > test3
betelgeuse:tmp james$ echo " method({a:a, b:b, c:c})" > test2
betelgeuse:tmp james$ grep "method([^{]" test*
test1: method(a,b,c) 
test3: method(a,b,c) 

설명하기: [ ] 캐릭터 클래스를 정의합니다. 즉,이 위치의 캐릭터는 클래스 내부의 모든 것을 일치시킬 수 있습니다.

그만큼 ^ 수업의 첫 번째 캐릭터는 부정입니다.이 클래스는 모든 캐릭터와 일치한다는 것을 의미합니다. 제외하고 이 클래스에 정의 된 캐릭터.

그만큼 { 물론이 경우 우리가 어울리지 않는 유일한 인물입니다.

그래서 일부에서는 캐릭터가있는 모든 문자열과 일치합니다. method( 그 뒤에 어떤 캐릭터가 제외하고 {.

대신 할 수있는 다른 방법이 있습니다.

betelgeuse:tmp james$ grep "method(\w" test*
test1: method(a,b,c) 
test3: method(a,b,c)

\w 이 경우 (C 로케일을 가정하면) [0-9A-Za-z]. 선택적인 공간을 허용하려면 다음을 시도 할 수 있습니다.

betelgeuse:tmp james$ grep "method([[:alnum:][:space:]]" test*
test1: method(a,b,c) 
test3: method( a, b, c) 
betelgeuse:tmp james$ 

(Grep Syntax에서 [:alnum:] is the same asw;:우주:refers to any whitespace character - this is represented ass` 대부분의 REGEX 구현에서)

당신이 사용할 수있는 캐릭터 클래스 a 수행원 {, 예를 들어

/method\([^{]/
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top