2009-11-10 7 views
1

WebBrowser 컨트롤을 사용하여 HTML 문서 작업을하고 있습니다. 단어를 검색하고 브라우저에서 강조 표시하는 유틸리티를 만들어야합니다. 문자열이 영어로되어 있으면 잘 작동하지만 한국어와 같이 다른 언어로 된 문자열의 경우 제대로 작동하지 않습니다.RegEx를 사용하여 MultiByte 문자열 검색

(가) 아래의 코드를 언급 한 시나리오는 IS-

이 지금은이 단어와 모든 발행 수를 강조 할 필요가, 사용자가 웹 페이지에서 단어 "예"를 선택한 고려 작동합니다. 또한 자신의 byteOffset을 계산해야합니다 (코드 스 니펫은 해당 작업 만 수행합니다).

이제 영어로는 아래 코드가 제대로 작동하지만 한국어와 같은 언어에서는 전혀 작동하지 않습니다.

그것를위한 각 루프

foreach (Match m in reg.Matches(this._documentContent))    

내부 못하고 여기 _documentContent는 문자열로 웹 페이지 소스가 포함되어 있습니다. 발생 없음 아니요. 코드가 영어 단어에 대한 작동하지만, 한국어에 대한 결과를 반환하지 않습니다

string strTemp = myRange.text; 
string strExp [email protected]">(([^<])*?)" + strTemp + "(([^<])*?)<"; 

int intCount =0; 
Regex reg = new Regex(strExp); 
Regex reg1 = new Regex(strTemp); 
foreach (Match m in reg.Matches(this._documentContent)) 
{ 
    string strMatch = m.Value; 
    foreach (Match m2 in reg.Matches(strMatch)) 
    { 
     intCount += 1; 
     if (intCount==OccurenceNo) 
     { 
      int intCharOffset = m.Index + m2.Index; 
      System.Text.UTF8Encoding d = new System.Text.UTF8Encoding(); 
      int intByteOffset = d.GetBytes(_documentContent.Substring(1, intCharOffset)).Length; 
     } 
    } 
} 
+0

실제 코드가 도움이 될 것입니다 ... – RageZ

+4

몇 가지 코드를 게시 할 수 있습니까? C#은 유니 코드이므로 인코딩이 제대로 읽혀지면 문자열을 가지고 무엇이든 할 수 있어야합니다. –

답변

0

경우, 내가하는 것이 좋습니다 수 있습니다 문서 여기

에서 선택한 단어의 선두로부터의 코드는, strTemp는 한국어 문자열을 포함 그것은 문화의 문제, 그래서 당신은 CultureInvariant에 RegexOptions를 설정하려고 할 수 있습니다

Regex reg = new Regex(strExp, RegexOptions.CultureInvariant); 
Regex reg1 = new Regex(strTemp, RegexOptions.CultureInvariant); 
0

을 내가 한국에 대해 다음 정규식 코드를 사용하고 있습니다 :

관련 문제