2012-12-07 6 views
1

PHP의 바르은 다음과 같은 형식이 될 수 있으며, 문자 번호를 포함 할 수 있으며 밑줄 :정규식은

$var_1 
$var_1[key_1] 
$var_1['key_1'] 
$var_1["key_1"] 
$var_1[key_1][key_2] 
$var_1['key_1']['key_2'] 
$var_1["key_1"]["key_2"] 
$var_1->property_1 
$var_1->property_1->property_2 

배열과 객체가 2 개 이상 중첩 된 요소를하지 않습니다. 객체에는 메서드가 없습니다 (즉, $var_1->method_1()은 필요하지 않습니다).

나는 그들에게 모든일치하는 정규식, 또는 다음과 같은 형식으로 HTML 에코 조각으로 변환 할 몇 가지 정규 표현식에 최소 금액을 필요 $1 전체 일치하는 문자열입니다

<?=$1?> 

. 같은 정규식에 상수를 추가 할 경우 그냥 완벽 할 것 : 이것은 주어진 예제를 수행해야

CONST_1 into <?=CONST_1?> 
+0

모든 변수의 값을 얻으려는 경우 http://us1.php.net/manual/en/function.get-defined-vars.php –

답변

2

:

\$\w+(?:\[(["']|)\w+\1\]|->\w+){0,2} 

이 때문에 (0를 사용해야합니다 <?=$0?>로 교체 1은 전체 일치가 아닌 첫 번째 캡처입니다.) 상수는 포함하지 않았습니다. 다소 까다 롭습니다 (예약 키워드가 아니라 상수라는 것을 어떻게 알 수 있습니까? 모든 키워드 포함). 정규식의

설명 : PHP 내에서이 패턴을 사용하는 경우, 당신은 ' 탈출 할 수 있다는

\$   # literal $ 
\w+  # letters, digits, underscores 
(?:  # subpattern to match indexing or a member 
    \[  # literal [ 
    (["']|) # a ', a " or nothing (capture it in group 1) 
    \w+  # letters, digits, underscores 
    \1  # the correct matching closing delimiter 
    \]  # literal ] 
|   # or 
    ->  # literal -> 
    \w+  # letters, digits, underscores 
){0,2}  # end of subpattern, repeat 0 to 2 times 

참고.

+0

을 사용할 수 있습니다. 감사! Dreamweaver에서 ''(\ $? \ w + (? : \]) \ w + \ 2 \] | -> \ w +) {0,2})' '$ 0'을 인식하지만, 이제는 잘 작동하고 심지어 상수와도 일치합니다! – Geo

+0

@Geo 역시 상수와 일치합니다.하지만'if'와'return' 및'echo'와 실제로 일치하는 문자열도 있습니다. 글자, 숫자 및 밑줄을 찾을 수 있습니다 (문자열, 함수 이름 등). –

+0

예, 방금 나 자신을 우연히 발견하고'?'를 삭제했습니다 :-) 다시 한번 감사드립니다 – Geo