2009-11-17 3 views
1

내가 ID와 텍스트 모든 레이블을 찾기 위해 노력하고있어,하지만 내 정규식이 작동하지 않습니다정규식은 레이블을 찾을 수

을 다음 정규식 :

<asp:[a-z]+.*? ID="(?<id>.*?)".*? Text="(?<text>.*?)".*?/> 

다음과 같은 샘플 텍스트 :

1. "<asp:Label ID="SomeID" Text="SomeText" />" has 2 groups: 
     1. "SomeID" 
     2. "SomeText" 
    2. "<asp:Label Text="SomeText" /> <asp:Label ID="SomeID" /> <asp:Label ID="SomeOtherID" Text="Some Other Text" />" has 2 groups: 
     1. "SomeID" 
     2. "Some Other Text" 
: 나는 다음과 일치를 얻을 수

<asp:Label ID="SomeID" Text="SomeText" /> 
<asp:Label Text="SomeText" /> 
<asp:Label ID="SomeID" /> 
<asp:Label ID="SomeOtherID" Text="Some Other Text" /> 

첫 번째 문제는 분명히 옳지 만 왜 # 2가 나옵니까?

그리고 다음과 같은 정규 표현식은 첫 번째 레이블 ("SomeID")하지만 네 번째 ("SomeOtherID")을 찾습니다

<asp:[a-z]+ (?!.*<[a-z]).*? ID="(?<id>.*?)".*? Text="(?<text>.*?)".*?/> 
+2

여기에 잘 말로 설명이있다! http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – Andomar

+0

왜 앱 내에서 코드를 검색하고 있습니까? 분명히 이것을하는 더 좋은 방법이 있습니까? –

+0

어쩌면 그는 자신의 응용 프로그램 내에서 코드를 검색하지 않고 편집자 내에서 검색 할 수 있습니까? 주위에 정규식을 지원하는 IDE가 있습니다. – Heinzi

답변

2

횡단을 방지하기 위해, [^>]*와 표현의 .*의 교체 시도 HTML 태그 경계. 문제는 표현의 중간에있는 .*?/> <asp:Label ID="SomeOtherID"과 일치한다는 것입니다. 이 같은

아마 뭔가 :

<asp:[a-z]+\s*ID="(?<id>[^"]*)"\s*Text="(?<text>[^"]*)"[^/]*/> 
+1

추가 도움말과 마찬가지로 ">>>><<<<": >>>.?? <<<< Text = "(? . *?)". *? /> –

+0

감사합니다. 정규 표현식을 사용하면 좋은 출발점이되었습니다. :-) – Sadhana