2016-09-28 2 views
2

올바른 정규식을 찾아 클래스 이름을 추출 할 수 없습니다. 내 코드 :{display : none} 전에 CSS 클래스 이름 만 추출하는 정규 표현식

preg_match_all('@\.(.*!\.){display:none}@', '.UlEa{display:none}.RNLW{display:inline}.jc0k{display:none}.Lyhf{display:inline}', $matches); 

$ 일치하지 않습니다. 올바른 정규 표현식은 무엇입니까?

+1

{https://regex101.com/r/oaaH1X/1} [시도 : 없음]을 시도해보십시오. 왜'! '를 사용 했습니까? –

+0

Thx, 작동합니다. '! '함수를 사용하지 않으면 {UlEa {display : none} .RNLW {display : inline} .jc0k {display : none} .Lyhf' –

답변

2

정규식은 . 문자와 일치하고 가능한 한 많이 줄 바꿈 기호 이외의 0보다 큰 문자 시퀀스를 마지막 !. 시퀀스까지 캡처 한 다음 {display:none}과 일치합니다. 텍스트에 ! 또는 다음 .이 없으므로 일치하는 항목이 없습니다. 참조

\.(\w+){display:none} 

regex demo

PHP demo : 당신의 일치를 얻을 수

한 가지 방법은 그룹 (1)의 내부 \w+ (= 하나 개 이상의 단어 문자의 [a-zA-Z0-9_] 세트의 것) 패턴을 사용하는 것입니다

preg_match_all('@\.(\w+){display:none}@', '.UlEa{display:none}.RNLW{display:inline}.jc0k{display:none}.Lyhf{display:inline}', $matches); 
print_r($matches[1]); // => Array ([0] => UlEa [1] => jc0k ) 
+0

OP의 요구 사항이 아닙니다. 버전을 사용하여 CSS 본문 앞에 모든 클래스 이름/ID를 캡처합니까? +1 – revo

+0

@revo : 일단 테스트 케이스를 제공하면 확실합니다. 또한 [{ '@ @. ([^ {.] +) {display : none} @''] (https://regex101.com/r/oaaH1X/2)를 사용해보십시오. –

+0

[여기 있습니다.] (https://regex101.com/r/oaaH1X/3) CSS 블록 선언 전에 모든 ID/클래스 이름을 캡처합니다. – revo

관련 문제