2012-06-08 4 views
1

은 내가 CSS 속성에서 크기 얻을 수있는 정규 표현식을 썼다 :CSS 속성의 크기 값을 가져 오는 정규식?

/(([+-]?\d*\.?\d+(\s)*(px|em|ex|pt|in|pc|mm|cm)?)|thin|medium|thick)(\s|;|$)/i 

을하지만 의도 한대로 어떤 이유로 자사가 작동하지 않습니다. 그것은 출력

preg_match_all('/(([+-]?\d*\.?\d+(\s)*(px|em|ex|pt|in|pc|mm|cm)?)|thin|medium|thick)(\s|;|$)/i', 
"border-bottom:1px solid #99999;", $matches); 

:

1px 
99999; 

을하지만 난 단지 1 픽셀의 값을 돌려 원하는 예를 들어, 내가 실행하면 다음과 같습니다.

나는 왜 그 위의 반환하지만 색상 값이 아닌 크기를 반환하는 방법을 알아낼 수없는 것 이해합니다. 나는 다음과 같은 부정적인 lookbehind를 사용하여 시도했지만 역시 작동하지 않습니다 :

/(((?<!#\d{3}|#\d{6})[+-]?\d*\.?\d+(\s)*(px|em|ex|pt|in|pc|mm|cm)?)|thin|medium|thick)(\s|;|$)/i 

내가 여러 크기 값 (즉, 마진)를 가질 수 그 CSS의 속성으로, preg_match_all 사용하고 싶습니다.

누구나이 정규식으로 크기 값만 반환하는 방법에 대한 아이디어가 있습니까?

도움 주셔서 감사합니다.

+2

[CSS Parser] (https://github.com/sabberworm/PHP-CSS-Parser)를 사용하십시오. HTML 같은 CSS 아마 정규식으로 구문 분석해서는 안된다. –

답변

1

좋아, 내가이 질문을 한 후 5 분 후에 알아 냈다. 긍정적 인 lookbehind를 사용하고 ""또는 세미콜론을 확인하십시오.

'/((?<=\s|:)([+-]?\d*\.?\d+(\s)*(px|em|ex|pt|in|pc|mm|cm)?)|thin|medium|thick)(\s|;|$)/i' 
0

regexp에서 #\d{3}|#\d{6}을 제거하고 사용해 보시지 않으시겠습니까?

preg_match_all('/(([+-]?\d*\.?\d+(\s)*(px|em|ex|pt|in|pc|mm|cm)?)|thin|medium|thick)(\s|;|$)/i', "border-bottom:1px solid #99999;", $matches); 
+0

예, 미안하지만 첫 번째 예제에서 시도한 것입니다. 나는 단지 잘못된 문자열을 c & p. 질문이 업데이트되었습니다. – thiesdiggity

관련 문제