2012-01-17 3 views
1

모든 경우에 맞는 일치 항목을 찾는 데 문제가 있습니다. 나는 예를 들어 따옴표에, 내가있는 경우정규식 일치 2 건

사례 1) 같은 것이

   <picture href="hello" ##xyz##>##xyz##</picture> 

출력이되어야합니다 (내 예를 들어 ## xyx ## 여기에) 뭔가 문자열을 잡으려면 그 중 누구도 따옴표 안에 들어 있지 않으므로 일치하는 항목이 없습니다. 내가 일치 할

경우 2)

  <picture href="##xyz##" dbhdfbhg="dbfdhfbhgbt fgkg ##xyz## hdjvffhgfhd"> 

같은 다른 경우에는 뭔가가있는 경우

둘 다 모두로 ## XYZ가 ##이있는 경우 따옴표에

경우 3)

   <picture href="##xyz##"> 
        ##xyz## 
        </picture> 

정규식 만 TEH 첫번째 N하지만 잡으려고해야 두 번째 것.

나는 (") ([^"]과 같은 것을 시도했다. )? (## xyz ##) ([^ "].)? (") 잘못된 출력을 얻습니다. 케이스 3에있는 은 정규 표현식에서 여러 줄 옵션을 사용하더라도 두 번째 캐칭을 잡아냅니다. 어떤 사람이 도와 줄 수 있니? 코딩에 C#을 사용합니다.

+1

정규식을 실행할 코드를 게시 할 수 있습니까? FireFox의 Regular Expression Tester 애드온에서 나를 제대로 작동시키는 것처럼 보입니다. 케이스 3을 사용합니다. 예. 정규식을 C# 문자열 (예 : 인용 부호 삭제)에 인코딩하는 문제 일 수 있습니다. –

+0

'(") ([^"] *) (## xyz ##) ([^ "] *) (")'? –

답변

0

다음 LINQPad 스 니펫과 같은 것을 시도해 볼 수 있습니다. 정규 표현식은 일치 견적을 찾기 위해 내다 (?=를 사용하고 해당 텍스트 세그먼트 내에서 ## XYZ ##을 일치 시키려고 :

var text = "<picture href=\"##xyz##\" dbhdfbhg=\"dbfdhfbhgbt fgkg ##xyz## hdjvffhgfhd\">"; 
var text1 = @"<picture href=""##xyz##""> 
        ##xyz## 
        </picture>"; 

var regex = new Regex("\"(?=[^\"]+)[^#]*##xyz##[^\"]*\""); 

var matches = regex.Matches(text); 
var matches1 = regex.Matches(text1); 
matches.Dump(); 
matches1.Dump(); 

이 다음과 같은 올바른 출력을 제공합니다 (즉, 첫 번째 문자열에서 두 경기와 초에 하나 개의 일치) : nregex.com에

enter image description here

1

, 내가받은 모든 예제와 함께 작동하도록 다음

\"([^"])*(##xyz##)([^"])*\" 
0

xml에서 속성을 구문 분석하려고하면 ## xyz ## 따옴표 사이를 찾을 수 없습니다. 예를 들어 :

"/> ##xyz## <a i=" 

당신은 같은 것을 시도 할 수 있습니다 :

<a i="2"/> ##xyz## <a i="##xyz##"/> 

귀하의 정규식이 일치합니다 나는 당신이 필요로하지 않는 \ "를 사용

\"[^\"<>]*(##xyz##)[^\"<>]*\" 

참고하지만,