2012-08-11 2 views
2

mi가 어떤 파일이고 어떤 파일이 내 응용 프로그램에 포함되어 있지 않은지 알려주는 작은 프로그램을 만들려고합니다. 나는이 정규식을 사용하려고 :파서 정규 표현식을 포함합니다

#include (<|")([^\r\n;#">]*)(>|") 

그것은 잘 작동하지만 그것은 또한 올바른으로 잘못된 결과를 가져옵니다

#include <stdio.h" 

이 C 컴파일러 불가능하다. 그래서 질문입니다 : 아무도 내 정규식을 올바르게 편집하는 방법을 알고 있습니까? 도와주세요. 그래서 그 대신 [<"]x[>"]을 수용

답변

3
#include (?:<([^\r\n;#">]*)>|"([^\r\n;#">]*)") 

당신은 <x> 또는 "x"에 동의합니다. Example.

1

나는 여러 가지 방법으로 시도했지만, 쉬운 방법이없는 것처럼 보였다. 적어도 나는 그것을 보지 못했다. "cstdio",도 <cstdio> 정말 잘 작동

  1. #include (<|")([^\r\n;#">]*)(\1)
    그래. 실패. <" 또는 기호가 매칭 전달되면
  2. #include (<(?=[^\r\n;#">]*>)|"(?=[^\r\n;#">]*"))([^\r\n;#">]*)(>|")
    은 여기 확인. 무거운.
  3. #include (<[^\r\n;#">]*>|"[^\r\n;#">]*")
    <...> 또는 "..." 인 경우 두 가지 경우를 모두 확인하십시오.

더 나은 답변을 기다리는 중에도 관심이 있습니다. 조금 생각합니다. 이미 잘 될 것입니다.

P .: 사례 2와 3에서 [^\r\n;#">]*을 별도의 문자열에 저장하고 정규 표현식의 다른 부분과 연결하는 것이 좋습니다.

0
#include\s{1,}(<|\")[^(>&\")]*(>|\") 
+0

이것은 라이브러리 이름에서 좀 더 정확할 수도 있지만, 이것은' poke