regexp : String 'string'을 검색 할 수는 있지만 'string ({')이 아닙니다.
문제
디렉토리의 모든 파일에서 콘크리트 단어 (더 이상 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 as
w;
:우주:refers to any whitespace character - this is represented as
s` 대부분의 REGEX 구현에서)
당신이 사용할 수있는 캐릭터 클래스 a 수행원 {
, 예를 들어
/method\([^{]/