2009-08-25 3 views
0

나에 대해 일치하도록 다음과 같은 문자열을 주어진 한 가정 :만 일치 공백 내부 {}

#sidebar h1 ul li{ #a:hover; height : 100px ;color: #fffff ; font-family: @fonts; } 

내가 원하는 것은 양쪽에 동봉되지 않은 중괄호 {} 내에서만 일치 공백이다 단어로.

((?!\w)|(?<!\w)) 

을하지만 너무 괄호 외부의 문자와 일치 :

나의 현재 정규식은 다음과 같습니다. 내가보기 주위했지만, 정말

내가 CSS 클래스 내용에서 모든 공백을 제거 할 문자열에 응축 될 수 있도록 .. 내가 상상하고 난 그냥 정규식에서 빨아 방법을 작동하지 않습니다 :

Btw은
#sidebar h1 ul li{#a:hover;height:100px;color:#fffff;font-family:@fonts;} 

, 나는 누군가가 그에 대한 빠른 테스트 환경을 필요로하는 경우, 그래서 나는 꽤 편리이 실버 하나의 발견은 .NET 정규식 엔진을 사용하고 있습니다 : http://www.regexlib.com/RESilverlight.aspx

+0

CSS에는'@ media' 섹션과 같이 중첩 된 대괄호 쌍이 포함되어 있습니까? 그렇다면 정규식으로는이 작업을 수행 할 수 없습니다. –

답변

1

을이 시도 :

Regex.Replace(str, @"(?:\B\s+|\s+\B)(?=[^{}]*\})", "") 

그러나 @media 섹션 (중첩 된 중괄호) 내부에 규칙이 있거나 메타 문자로 중괄호를 사용하는 음성 규칙이 있으면 속일 수 있습니다.

+0

감사합니다. 이것은 작동하는 것처럼 보이지만 @media 섹션을 지원하기를 원하기 때문에 정규식없이 솔루션을 조사해야합니다. – Tigraine

2

일부 CSS 요소에 여러 단어 값 (border: 1px solid red)이있는 것을 감안할 때 설명하는 공백 제거 프로세스는 재앙입니다. 난 당신이 바로 다음과 같은 장소에서 공백을 제거하는 것이 좋습니다 것 : 후

  • '{'전에
  • '}'전후
  • ';' 전후
  • ':'

다행히 때문에 CSS의 구문으로, 이러한 패턴 중 어느 것도 {...} 섹션 외부에서 발생하지 않습니다. 안타깝게도 .NET regex engine의 특징을 모르겠다. 아마도 이것은 작동 할 것이다.

(+(?=[};:])|(?<=[{;:]) +) 
관련 문제