2011-09-15 4 views
3

Perl로 PHP 코드 재 포맷

if (true) 
{ 
    doSomething(); 
} 

그러나 우리는 다음과 같이하고 싶습니다 :

if (true) { 
    doSomething(); 
} 

우리는 Perl 내부 편집 매스 편집 기능을 사용하여 전체 코드베이스.

그러나 나는 공백 문자 다음에 중괄호가 오는 개행 문자와 일치하도록 할 수 없습니다.

여기 내가 뭘하려고하는지

perl -pi -w -e 's/if(.*)\n\s+\{/if$1 \{/g' testfile.php 

나는 완전한 손실에있어; 공백과 중괄호를 포함하지 않으면 일치합니다. 하지만 그렇게 도움이되지는 않습니다.

답변

3

-p을 사용하면 Perl이 파일 줄을 한 번에 한 줄씩 반복하므로 여러 줄에 걸쳐 내용을 일치시킬 수 없습니다.

을 사용하면 입력 레코드 구분 기호를 null로 설정하고 Perl이 전체 ​​파일을 한 번에 읽을 수 있습니다.

당신은 이런 식으로 뭔가를 시도 할 수 있습니다. (perlrun 참조) :이 편집 PHP를위한 훌륭한 솔루션 아니라고

perl -p0iwe 's/\bif\b(.*)\n\s*\{/if$1 \{/g' test.php 

참고. 파일의 문자열, 주석 및 텍스트 내용은 이러한 단순한 솔루션을 쉽게 깨뜨릴 수있는 몇 가지 사항 일뿐입니다. 그 일에 맞는 도구를 찾는 것이 좋습니다. 일부 편집자/IDE는 코드를 (다시) 포맷 할 수 있도록 지원합니다. 아마도 그 중 하나를 시도해 볼 수 있습니다.

1

Perl 코드베이스를 변경하려면 Perl::Tidy을 사용하는 것이 좋습니다. 하지만 PHP에는 비슷한 도구가 있다고 가정합니다.

가능한 옵션을 한 번 살펴보고 원하는 스타일을 정의하십시오. 구성 파일에 저장하고 전체 코드 기반을 다시 포맷하십시오. 이 단계를 버전 시스템에 커밋하여 일관된 모양으로 만들 수도 있습니다. 어떤 정규 표현식을 통해 두 개의 큰 장점을 가지고

: 당신은 하나의 실행에 모든 스타일의 환경 설정을 정의하기 때문에

  1. 당신은 시간을 절약 할 수 있습니다. 2 시간이 걸린다 고 가정 해 봅시다. 같은 시간에 같은 양의 옵션을 다루는 정규 표현식을 쓰는 것을 보지 못합니다.
  2. 그리고 훨씬 더 중요합니다 (말할 것도 없지만 결코 일어나지는 않지만 가장 확실하게) : 조만간 정규 코드에서 다루지 않는 예외적 인 코드를 갖게 될 것입니다. 검색되지 않았거나 정규식과 일치하지만 다른 것으로 대체되면 안되는 if 일 수 있습니다. 가장 좋은 경우에는 리포머가 충돌하고 정규 표현식을 조정해야합니다. 최악의 경우, 리포터는 코드에 버그를 가져오고 코드가 실행될 때까지는이를 알지 못합니다.
0

Perl :: Tidy 또는 명령 줄 도구 perltidy를 사용하십시오.

PHP 코드를 한 번에 다시 포맷하는 것이 좋습니다.그것을 블럭별로 복사하여 빈 텍스트 파일에 붙여 넣으십시오 (PHP 조각이 여전히 구문 적으로 유효한 Perl 코드가되도록). 그런 다음 해당 파일을 perl-tidy하십시오. 충분하다면 PHP 코드 파일로 대체하십시오.

이렇게하면 Perl :: Tidy를 사용하여 복잡하고 중첩 된 PHP 데이터 구조를 형식화 할 수 있습니다.

perltidy이

가 AFAIK 알고 (단지 예로서, PHP의/* */C 스타일의 여러 의견이 perltidy에 대한 문제이다) 일반적인 PHP 코드를 포맷 할 수 없습니다, 더 PHP의 아름답게은 강력한 없다 perltidy. 나는 이것을 몇 년 전에 찾고 있었다. 그러는 동안 일들이 바뀌었을 수도 있습니다.