2010-11-30 4 views
0

호출닷넷 C#을 정규식 내가 같은 문자열을 구문 분석하려고 해요

A는, B, 나는, J는, D, F 방법 이름 속성 이름입니다

.A.B[C].D(E).F("(G)/{H})", "1" == "1").I.J[K]

, E, "(G)/{H})", "1"== "1"방법 매개 변수 및 C 및 K 색인 값. . 매개 변수에는 모든 문자가 포함될 수 있으며 문자열에는 여러 가지 속성 및/또는 메서드가 포함될 수 있습니다.

나는 그 일을 할 정규식을 찾고있다. 지금까지 나는

(?<=\.)(?< PropertyOrMethodName>\w+)((\\[(?< Index>\w+)\\])|((?< Open>\\()(?< Parameters>.+)(?<-Open>\\))(?(Open)(?!))))?

함께했다하지만 좋은 예 아니다 위의 샘플은 D (E) .F ("(G)/{H})", "1"== "1") 함께 수집합니다.

+1

이, 적어도 나에게, 정규식 HTML 구문 분석하려고처럼 * 작은 * 비트 소리 - 단지에 대한 행할 수를 ** 몇 가지 ** 사례가 있지만 가장자리 케이스에 대처하는 강력한 무언가를 원한다면 대신 상태 기반 파서를 작성해야 할 수도 있습니다. –

+0

맞아, 일부 펑키 정규식은 내 문제에 대한 빠른 해결책을 제공하는 반면 파서는 적절한 것이지만 ... 감사합니다. – pRintLn

+0

당신이 원했던 것이 가능할 수도 있지만 솔직히 말해서, 나는 당신의 질문에 답하는 데 시간을 투자하지 않을 것입니다. ** 세부 사항이 많이 ** 부족하기 때문입니다. 인덱서는 항상 단순합니까? 문자열 외부에 중첩 된 괄호가있을 수 있습니까? 중첩 된 중괄호 또는 대괄호는 어떨까요? 정말로 C#을 구문 분석하려고합니까, 아니면 다른 언어입니까? 그리고 가장 중요한 것은 - 예상되는 결과는 무엇입니까? – Kobi

답변

1

구문 분석하고자하는 C#의 샘플이 심각하게 제한되어 있지 않으면 정규 표현식을 사용하여 좋은 결과를 얻지 못할 것이라고 생각합니다. 그렇다면 예제를 제공하는 것이 좋습니다. 귀하의 질문에 가능한 라인. 예를 들어

:

성공적이 다른 복잡한 경우 (행운)을 구문 분석 할 수있는 정규식을 마련하더라도
public void SomeMethod(int x) 
    { 
    foo.bar.baz(x, y => qux(y))[(x - 1)] = e.value; 
    } 

은 - foo는 네임 스페이스, 클래스 바 및 정적 방법을 바즈입니다 ? 또는 foo를 현재 유형의 필드, bar 속성 및 baz 인스턴스 메서드입니까? 파서가 없으면 각 요소가 의미하는 바를 통찰력을 얻지 못합니다.

내가 파서보고 제안

가 -이 SO 질문으로 시작하려고 : Parser for C#

관련 문제