2014-10-06 4 views
-1

문자열의 내 정규 표현식 부분에 "임의의 값"이있는 부분이 필요합니다. 단, 임의 값 내에서 @를 발견하면 해당 부분을 무시해야합니다.정규식에서 특정 문자가 포함 된 문자열을 무시합니다.

예를 들어, 나는

string storeProcDefinition = @"TTTTT.TTTTTTTT (@pname nvarchar, @pdec decimal(18,5) = null, @pnum numeric(18, 10), @pint int = null) AS BEGIN SET NOCOUNT ON; SELECT TTT" 

그래서 내가

(18,5) 
(18, 10) 

아니라 같이이 섹션에 가서 일치하는 모든 섹션 "(아무것도)"를 찾으려면이 문자열을 가지고

(@pname nvarchar, @pdec decimal(18,5)` 

내 아이디어는 문자열에서 @ 기호를 확인하거나 새로운 것이 발견되면 다시 시작하는 것입니다. 하지만 Regex에는 char afik을 포함하지 않는 옵션이 없습니다.

내가 작동합니다 아무것도

답변

1
\([^@]*?\) 

일치하지 않습니다이

var matches = Regex.Matches(storeProcDefinition, @"\(^(?!\@)(.*?)\)"); 

같은 것을 가지고있다. See demo.

설명 :이 foo(bar()) 같은 중첩 된 괄호를 지원하지 않습니다

\(// match a literal "(" 
[^@]*? // match any text except "@"... 
\) //...up to the next ")" character 

참고.

+0

감사합니다. 나는 그와 가까운 곳에서 시작하여 잘못된 방향으로갔습니다. – Domitius

+0

@AvinashRaj : 저는 중요하지 않다고 생각합니다. 입력에 중첩 된 중괄호가 포함되어 있으면 두 패턴 모두 엉망입니다. 단지 다르게 수행합니다 ... (P.s .: 중첩 된 중괄호를 처리하는 방법을 보여주기 위해 데모가 업데이트되었습니다) –

관련 문제