2012-01-11 4 views
1

환경 : Visual Studio 2008 sp1정규식 일치 "대상 문자열"

정규식을 따르는 사람이 나를 도울 수 있습니까?

'대상 문자열으로 가려고합니다. 패턴은 당신이 당신의 사각 괄호를 탈출해야합니다, 그렇지 않으면 그들은 문자 클래스를 생성로 잘못 해석 될 것이다 [이름] = ''

/*Input String*/ 
SET [blah] = 'AE', [blah] = 'A1A', [number] = 004 WHERE [name]='target string' 


/*Current Regex*/ 
(?<=[?name]?=).*(?=\') 

/*Current Results*/ 
'AE', [blah] = 'A1A', [number] = 004 WHERE [name]='target string 

/*Desired Results*/ 
'target string 

답변

1

이것은 무엇입니까?

(?<=\[name]=).*?(?=') 

또는 대상 문자열이 선도 (')없이 반환 할 경우

: (') :

(?<=\[name]=').*?(?=') 

참고 I 대상 문자열이 어포 스트로피를 탈출하지 않는 가정 '.


편집 : 이것은 탈출 아포스트로피 트릭을 수행합니다,

(?<=\[name]=)(''|.)+?(?='([^']|$)) 

그것은

SET [blah] = 'AE', [blah] = 'A1A', [number] = 004 WHERE [name]='John''s pub' 
+0

영업의 정규식에서 "'John''s pub"를 찾을 수는 옵션으로 사각 브래킷을했고 의도적이라고 확신 할 수 있습니다. 이것은 SQLServer UPDATE 문의 일부처럼 보입니다. 여기서 field-names는 대괄호로 묶지 않아도됩니다. – ruakh

+0

예? 브래킷을 선택적으로 만들 것입니다. –

+0

"하지"않고 "하지"않습니다. (나는 당신의 제안 된 정규 표현식이 잘못되었다고 말하고있다.) – ruakh

3

사이의 임의의 문자열입니다. 즉 당신이 필요하다 :

(?<=\[?name\]?=).*(?=\') 

나는 또한 너무 당신이 대상 문자열 뒤에 아무것도 를 잡는 위험을 감수하지 않는, 더 명시 적으로 '[^']*.*을 변경 권하고 싶습니다; Tim Pietzcker는 \' (정규식 끝 부분 근처) 대신 '을 쓸 수 있다고 (현재 삭제 된 주석에서) 지적합니다. 그래서 :

(?<=\[?name\]?=)'[^']*(?=')