2016-06-24 4 views
0

파일의 첫 번째 줄을 바꾸고 싶습니다. 예를 들어 파일에서 '@base'를 찾아 '@base : 20;'으로 바꾸고 싶습니다. 나는이 하나를 발견 : how to replace a particular line in a text file using php?, 그러나 이것은 발견 된 문자열의 모든 occurences을 바꿉니다, 나는 오직 첫 번째 싶어요.문자열 PHP에서 일치하는 첫 번째 줄 바꾸기

누구나 아이디어가 있습니까?

내 파일은 다음과 같습니다 :

@base: 24px; 
@border-color: #B2B; 

.underline { border-bottom: 1px solid green } 

#header { 
    color: black; 
    border: 1px solid @border-color + #222222; 

    .navigation { 
    font-size: @base/2; 
    a { 
    .underline; 
    } 
    } 
    .logo { 
    width: 300px; 
    :hover { text-decoration: none } 
    } 
} 

내가 @Base의 선두로부터 내가 그것을 대체 할에 어디 라인 전체를 교체합니다. '@Base : 50 픽셀;'. 그래서 출력은 다음과 같이 될 것이다 : 나는 전체 라인을 발견하고 그것을 대체 할 수 없습니다 그 이유는 그래서 @Base 후

@base: 50px; 
@border-color: #B2B; 

.underline { border-bottom: 1px solid green } 

#header { 
    color: black; 
    border: 1px solid @border-color + #222222; 

    .navigation { 
    font-size: @base/2; 
    a { 
    .underline; 
    } 
    } 
    .logo { 
    width: 300px; 
    :hover { text-decoration: none } 
    } 
} 

픽셀은 다를 수 있습니다.

+1

파일 샘플, 예상 출력 및 이상적으로 이미 시도한 것을 포함하도록 질문을 업데이트하십시오. –

+0

질문을 업데이트했습니다. –

+0

어디서 붙어 있습니까? 이것은 사소한 작업처럼 보입니다. – Eiko

답변

0

preg_matchpreg_replace의 도움으로이 작업을 수행 할 수 있습니다.

배열로 파일을 읽는 것으로 시작하여 배열을 탐색하고 바꿀 내용과 일치하는 줄을 찾습니다.
그런 다음 줄을 수정하고 첫 번째 항목 만 변경되도록 루프를 중단하십시오.
마지막으로 파일에 줄을 다시 써주십시오.

<?php 

$lines = file('file.css'); 

// note that $line is used as a reference 
// so we can modify the existing array 

foreach ($lines as &$line){ 

    $isMatch = preg_match('#base:\s(\d+)px;#',$line); 

    if ($isMatch){ 

     $line = preg_replace('#\d+#','50',$line); 
     break; 

    } 

} 

file_put_contents('file.css',implode('',$lines)); 

preg_match은 패턴이 발견 될 때까지 각 라인을 테스트합니다.
문자열이 인 줄을 찾습니다. [digits] px;. 일치 우리 값 50break 그래서 더 이상의 변경이 이루어지지되는 루프 [숫자]의 패턴을 교체 preg_replace을 사용하여 라인을 수정 찾으면

.

마지막으로 을 사용하지 않고을 사용하여 수정 된 배열을 문자열로 변환하고 내용을 다시 파일에 씁니다.

+0

감사합니다. –

+0

대단히 환영합니다! –

0

다음과 같이 시도해 볼 수 있습니다.

$content = file("yourfilepath"); 
for($i = 0; $i < count($content); $i++) { 
    if (strpos($content[$i], "@base") !== false) { 
     $content[$i] = "@base:20;\n" 
     break; 
    } 
} 
file_put_contents(implode(PHP_EOL, $content)); 

나는 희망한다.

관련 문제