2014-05-12 3 views
1

PHP 파일에서 모든 배열 표기법을 객체 표기법으로 변환하려고합니다.PHP 정규식 찾기/바꾸기 PHP 표기법을 객체 표기법으로 바꾸기

$ 일 [ '키']

에 : 즉, 나는이 모든 항목 변환하기 위해 노력하고있어

$ 쿄코 -> 내가 생각

키를이이었다 간단한 정규식 문제. 나는이 패턴을 찾고 있어요 :

\$thing\['(.*?)'\] 

그리고 이것으로 교체 :

$thing->\1 

그것은 텍스트 랭글러에서 제대로 작동하지만 VIM에서 작동하지 않습니다. 이것은 전체 명령은 내가 실행하는 것을 시도하고있다 :

:s/\$thing\['(.*?)'\]/$thing->\1/g 

내가 오류 것은 :

:s/\$thing\['\(.*?\)'\]/$thing->\1/g 
:

E486: Pattern not found: \$thing\['(.*?)'\] 

는 또한 그룹의 주위에 탈출 괄호로 명령을 시도

하지만 같은 오류가 발생합니다. 누군가 나를 도와 줄 수 있습니까?

답변

2

그룹화를 위해 괄호를 이스케이프 처리하고 표현을 사용하여 욕심이 많지 않은 일치를 수행하려면 .\{-} 표현식을 사용하십시오. 처럼은 다음과 같습니다

:s/\$thing\['\(.\{-}\)'\]/$thing->\1/g 
+0

감사합니다. 그게 효과가 있었어. 나는 전체 파일을 대체하기 위해 : s 대신에 : % s를 사용할 필요가 있었다. – flyingL123

+0

'%'를 사용하여 앞에 붙이면 현재 문서의 모든 행과 일치합니다. – zmo

+0

(... 복잡한 정규 표현식을 작성하는 경우 거의 항상 필요한 것입니다. 한 줄만 변경하려는 경우 정규식이 죽은 단순하지 않으면 일반적으로 그냥 손으로 할거야.) – iconoclast

0

Grouping and backreferences를 참조 paranthesis는 탈출해야합니다.

qq   ; save macro in register q 
/$thing<CR> ; look for next $thing 
"adi'  ; remove everything between quotes on current line and place it in register a 
; result: $thing[''_] 
l   ; move to next character on right 
; result: $thing['']_ 
d%   ; remove everything up to matching bracket 
; result: $thing 
i-><ESC> 
; result: $thing-> 
"ap   ; paste from register a 
; result: $thing->key 
q   ; end macro 

및 매크로를 사용하여 다음 중 하나를 제거 : 대안으로 나

:s/\$thing\['\(.*\)'\]/$thing->\1/g 
2

에 대한 아래 작품 당신은 또한 할 수

@q 

을 다음과 같은 일이 반복 매크로 :

@@ 

및 매크로 반복 42 번 :

[email protected]@ 
+0

그래, 나는 vimgolf를 좋아한다 ;-) – zmo