2010-11-22 4 views
0

나는 다음과 같은 C#에서 정규식이 :C# 정규 표현식이 줄 사이에 일치하지 않는 이유는 무엇입니까?

<h1>test content<br> 
</h1> 

를 지금은 다음과 같이 문자열 일치 :

<h1>test content<br></h1> 
<h1>test content</h1> 

Regex h1Separator = new Regex(@"<h1>(?'name'[\w\d\s]+?)(<br\s?/?>)?</h1>", RegexOptions.Singleline); 

은 다음과 같습니다 문자열을 일치하도록 시도

내가 뭘 잘못하고 있니? 줄 바꿈 문자와 일치해야합니까? 그렇다면 C#은 무엇입니까? 나는 하나를 찾을 수 없다.

답변

4

br 태그 끝과 다음 태그 시작 사이의 공백을 확인하지 않으므로 즉시 hr 태그가 표시됩니다. 그 사이에 \ s *를 추가하십시오.

0

C#의 개행 문자는 \n입니다. 그러나 정규 표현식에 능숙하지 않고 정규 표현식에서 개행 문자가 있으면 어떻게 될지 말할 수 없습니다. 당신은이 한 줄의 정규 표현식으로 정의해야

1

RegexOptions.Singleline 플래그가

+0

나는 말해야했다라고 생각한다. 그러나 어느 옵션도 작동하지 않는다. 어떤 경우에 정규식 자체에 문제가있을 가능성이 있습니까? –

+4

Singeline은의 동작을 제어합니다. 엘레멘트 (뉴 라인을 제외한 모든 것 또는 모든 것과 일치하는지 여부). 그는을 사용하지 않습니다. 요소를 그의 정규식에서 변경하면 안됩니다. – MikeP

+2

및 Multiline "^ 및 $의 의미를 변경하여 전체 문자열의 시작과 끝이 아닌 모든 줄의 처음과 끝에 각각 일치시킵니다." (MSDN에서). 이 두 가지 RegEx 옵션에 대해 많은 혼란이 있음을 알 수 있습니다. –

-1

RegexOptions.Multiline이 여러 줄 플래그를 사용하여 사용 :) 참조하십시오. (닷넷 플랫폼에 관한 나의 잘못을 지적하기위한 편집).

단일 라인 모드는 전달할 전체 문자열을 하나의 항목으로 처리합니다. 따라서 ^$은 전체 문자열을 나타내며 문자열 내의 시작과 끝은 아닙니다. 예 <h1>(?'name'[\w\d\s]+?)(<br\s?/?>)?</h1>이 일치합니다 :

<h1>test content<br></h1> 

여러 줄 모드 (즉, 그들은 모든 줄 바꿈 볼 것이다) 문자열 내의 각 라인의 시작과 끝을 ^$의 의미를 변경합니다.

Regex h1Separator = new Regex(@"<h1>(?'name'[\w\d\s]+?)$(<br\s?/?>)?</h1>", RegexOptions.Multiline); 

원하는 패턴과 일치하는 것입니다 : 요컨대

<h1>test content<br> 
</h1> 

, 당신은 여러 줄의 작업을 기대하는 정규식 파서 말할 필요가있다. regex의 방언을 말하는 정규 표현식 디자이너가있는 것이 도움이됩니다. 많이있다.

+0

사실이 아닙니다. RegexOptions.Singleline의 문서를 참조하십시오. – MikeP

+0

사실이 아닙니다. [MSDN 문서] (http://msdn.microsoft.com/en-us/library/yd1hzczs)에서 살펴보십시오.aspx) –

+0

이것은 여러 플랫폼에서 작업하는 곳입니다. OP는 여전히 Multiline 플래그를 사용해야하고'$ '를 정규식의 첫 번째 줄 끝에 삽입해야합니다. –

0

당신은 종료 </h1> 전에 문자열로 점 .을 추가하고 RegexOptions.Singleline 옵션을 유지하거나 RegexOptions.Multiline로 변경하고 </h1> 전에 정규식에 $를 추가 할 수 있습니다. 세부 사항 here

관련 문제