2010-02-10 4 views
0

다음과 같은 주석 블록이 있습니다.PHP에서 주석 변수를 구문 분석하기위한 정규식

/** 
* variable1: value 
* variable2: value 
*/ 

또는 이와 유사;

/* 
variable1: value 
variable2: value 
*/ 

필요한 변수/값 쌍을 원하는 수만큼 조합하여 배열에 추가 할 수 있습니다. 나는 그것을 알아내는 것처럼 보일 수는 없지만, 나는 잘못된 것들을 매치하고있다.

모든 변수는 단일 라인이므로 모든 것을 단순화해야합니다. '변수'앞에 또는 콜론 뒤에 오는 공백은 무시해야하지만 값 행의 다른 공백은 유지되어야합니다.

업데이트 : 내가 선택한 답변에 약간의 확장이었다로가는 결국 무엇

;

/(\w)*\s*:\s*([\w'"\/.: ]*)/ 

이렇게 URL을 값으로 사용할 수있었습니다.

/** 
* url: 'some/file.png' 
* url: "http://www.google.ca/intl/en_ca/images/logo.gif" 
*/ 
+1

당신이 정규식을 게시 할 수 ? 어쩌면 당신은 너무 멀지 않을지도 모릅니다. –

+0

정확히 하나의 주석 블록을 포함하고 다른 데이터를 포함하지 않는 $ s 문자열로 시작할 수 있다고 가정 할 수 있습니까? –

+0

두 가지 예가 동일하게 다루어 져야합니까? – FrustratedWithFormsDesigner

답변

1

이것은 작동하지 않습니까? 난 당신이 아무것도 일치 . 세트

\/\*.*?\*\/ 

처럼 뭔가 주석 블록을 뽑아 가정

(\w)*\s*:\s*(\w*) 

(가정 멀티 라인 매칭 사용).

+0

그런 종류의 작품. 이름과 값을 분리하지 않고 전체 변수 행을 일치시킵니다. 하나의 정규식에서 키/값 쌍으로 분할 할 수 있습니까? 아니면 다른 패스가 필요합니까? 또한 값은 공백을 지원해야하므로 \ w *는 작동하지 않습니다. –

0

이 시도 할 수 있습니다 :

$str=<<<A 
/** 
* variable1: value 
* variable2: value 
*/ 

some text 

/* 
variable1: value 
variable2: value 
*/ 

A; 

preg_match("/\/\*(.*?)\*\//sm",$str,$matches); 
foreach($matches as $k=>$v){ 
    $v = preg_replace("/\/|\*/sm","",$v); 
    $v = array_filter(explode("\n",$v)); 
    print_r($v); 
} 

출력

$ php test.php 
Array 
(
    [1] => variable1: value 
    [2] => variable2: value 
    [3] => 
) 
Array 
(
    [1] => variable1: value 
    [2] => variable2: value 
) 

지금 당신이 폭발하여 그 변수를 분리 할 수 ​​있습니다 등 잘못된 결과를 얻을 수 있도록 노력

관련 문제