2013-04-07 4 views
0

내 목록 (vb.net 목록)에서 모든 함수 호출을 찾고 함수 이름을 갖고 있다고 가정합니다.정규식을 사용하여 함수 호출을 찾는 방법은 무엇입니까?

함수는 점은 줄 바꿈을 포함하는 것으로 해석된다고 가정하면, 여러 줄에 걸쳐있는 경우에도 작동합니다
myfunc\( .* \) 

은 (점에서이 작업을 수행 할 수있는 옵션이 있습니다 : 첫째 나는 같은 정규 표현식을 할 수 있다고 생각 -net)

하지만 그때 내 자신의 일부 인수 자체가 함수 호출이 될 수 있음을 알았습니다. 즉,
myfunc (a, b, c, d(), e), 이는 괄호가 일치하지 않는다는 것을 의미합니다.

그래서 메인 함수 호출은 일반적으로 첫 번째 항목이 선에 있기 때문에, 난 할 수 있다고 생각 :

^myfunc(.* \) $ 

아이디어는 함수가 행의 첫 번째 항목이 있다는 것입니다 (^) 마지막 paren은 줄 ($)의 마지막 항목입니다. 그러나 그것도 작동하지 않습니다.

내가 뭘 잘못하고 있니?

+0

(. *. *. *)'. 하지만 대부분의 프로그래밍 언어 구문은 문맥 자유 문법 (Chomsky hierarchy : http://en.wikipedia.org/wiki/Chomsky_hierarchy 참조)을 기반으로하기 때문에 정규식은 완벽하지 않습니다. – chesles

답변

3

수 없습니다. 의도적으로 정규식은 여기서 필요한 재귀를 처리 할 수 ​​없습니다. Can regular expressions be used to match nested patterns?

을 그리고 네, 좀 특별한 "정규 표현식"재귀를 허용 할 것을 알고 :

자세한 내용은, 당신은 여기에 첫 번째 대답을 읽을 수 있습니다. 그러나 대부분의 경우 이것은 무언가를 끔찍하게한다는 뜻입니다. 실제로 언어 구문을 이해할 수있는 것을 사용하는 것이 훨씬 낫습니다.

+0

재귀가 아니라고 생각합니다. VB.net은 밑줄이있는 모든 행을 끝내기 때문에 여기에 필요합니다. 그래서 나는 "end line"이 뒤 따르는 괄호까지 모든 텍스트를 검색 할 수 있어야합니다. 나는 다음과 같이 생각할 것이다 :^myfunc \ (..... \) $ - 그러나, dot-net에서 정규 표현식을 사용하는 것은 까다 롭다. 왜냐하면 여러 줄을 매칭하기를 원한다면, 그 의미를 바꾸는 옵션을 사용하기 때문이다. "달러 기호"와 "캐럿"은 시작과 끝이 아니며 줄 끝입니다. –

0

이 질문에 대한 직접적인 대답은 아니지만 기능의 모든 용도를 찾으려면 Visual Studio를 사용할 수 있습니다. 그냥 마우스 오른쪽 기능을 클릭 한 다음 Find All References를 선택

enter image description here

비주얼 스튜디오는 당신에게 결과를 표시합니다. 그런 다음 각 줄을 두 번 클릭하면 Visual Studio에서 해당 줄로 이동할 수 있습니다. 특정 기능에 대한 호출을 찾고 당신이 걸리는 얼마나 많은 인수, 당신은 myfunc에`식으로 뭔가를 시도 할 수 있습니다 알고있는 경우

enter image description here

+0

Visual Studio에서 참조를 찾을 수 있다는 것을 알았지 만 폴더를 거치며 특정 함수에 대한 모든 호출을 수집하는 프로그램을 작성하고 있습니다. 여러 줄에 걸쳐 파일을 넣었을 때도 마찬가지입니다. 두 개의 변수 위치를 전환하는 등의 실수가있는 호출이 있는지 확인합니다. 즉, 디버깅을 돕는 것입니다. –

관련 문제