2009-09-03 6 views
0

내부 주소록 응용 프로그램에서 벗어난 HTML 페이지가 있는데 테이블의 필드 이름과 필드 값을 모두 일치 시키려고합니다..NET 정규 표현식 -? 작동하지 않습니다 (내 생각처럼)

지금까지 최대 요리 한 정규 표현식은 잘 키와 값의 대부분을 일치

"href.*?>(.*?)<\\/a.*>(.*?)<\\/span" 

입니다. 문제는 일부 값이 링크이기도하다는 것입니다.

href="JavaScript:updateField(&quot;peopleType&quot;, &quot;390061&quot;, &quot;[email protected]&quot;, &quot;bob&quot;, &quot;Reg&quot;, &quot;Bob Bobson&quot;);" onMouseOver="window.status='Update this field if possible, else explain how to update it';return true;" onMouseOut="window.status='';return true;">Emp Type</a></span></td> 
<td nowrap=""><span style="font-family: Arial, Times New Roman, Courier New, Courier, monospace; color: #006699">Reg</span 

예 문자열 -

예 문자열 (작품 링크없이) (링크 - 작동하지 않습니다)

href="JavaScript:updateField(&quot;dept&quot;, &quot;390061&quot;, &quot;[email protected]&quot;, &quot;bob&quot;, &quot;Reg&quot;, &quot;Bob Bobson&quot;);" onMouseOver="window.status='Update this field if possible, else explain how to update it';return true;" onMouseOut="window.status='';return true;">Dept</a></span></td> 
<td nowrap=""><span style="font-family: Arial, Times New Roman, Courier New, Courier, monospace"> 
<a href="JavaScript:showDept('TheBobs');" onMouseOver="window.status='Show People in This Dept';return true;" onMouseOut="window.status='';return true;">TheBobs</a></span 

(키를 캡처) 상반기 correctly.The 문제를 작동 욕심 많은. *가 끝나는 캐럿을 찾은 다음 비 탐욕스러운 링크를 발견하는 링크 끝까지 일치한다는 것입니다. 캡쳐 그룹에서 아무것도 남지 않았습니다. 내가 링크 (세 번째 캡처 그룹 - 그 안에/A 포함)와 문자열에 대한 잘 작동 정규식

"href.*?>(.*?)<\\/a.*>(.*?)(<\\/a>)?<\\/span" 

시도 나의 두 번째 캡처 그룹이 작동 링크의 긴밀한 일치를,하지만 그것을 링크가 아닌 값에 대해서는 작동하지 않습니다. 왜냐하면 (내가 생각하기에) 닫는 링크 태그를 찾고 있기 때문입니다. 나는 생각했다? 그 포획 그룹의 끝에는 선택 사항이되어야합니다.

나는 RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline.

값의 링크가있는 대소 문자와 대소 문자가 일치하지 않는 정규식을 얻으려면 어떻게해야합니까? 감사합니다. .

+0

견본에 포함될 "필드 이름"과 "필드 값"은 정확히 무엇입니까? – Lucero

답변

3

나는 HTML을 사전 처리하고 정규식 구현을 떠오르게하는 것으로 알려진 내용을 제거하는 것을 고려할 것이다.

테스터와 마찬가지로 Silverlight의 Regex 구현이 .NET과 호환되므로 Regex Hero을 사용할 수도 있습니다.

+1

+1 - 필자는 온라인 정규식 검사기를 찾고있었습니다. 감사합니다. –

1

Regex Coach이라는 무료 도구를 사용하면 정규식을 쉽게 디버깅 할 수 있습니다.

0

봅니다 "./A *>"

내가 무엇을 말할 수에서
href[^<>]+>(.*?)<\\/a[^<>]*>(.*?)<\\/span 

, 그것은처럼 보인다 너무 욕심 나는 항상 정규식의를 작성할 때 최대한 구체적으로 시도되고 ...하는 나는 왜 "[^ <] +"

1

"을 사용하지 마십시오. 캐릭터. 그것은 일반적으로 당신에게 아무런 문제가 없습니다. 왜냐하면 그것이 특이 적이기 때문입니다. 이 같은

시도 뭔가 :

href=[^>]*>([^<]*)</a\s*>((?:(?!</span\s*>).)*) 

참고 : 샘플 이름 - 값 쌍을 반환 것이 아니라 단지 이름 (첫 번째 캡처 그룹의 이름입니다 가정)하지 않기 때문에, 내가 돈 ' 당신이 기대하는 바를 알고 있습니다. 더 완벽한 샘플을 게시하고 정확히 캡처 할 부분을 지정하십시오.