2014-03-07 67 views
0

我寫這段代碼來替換從右到左和從左到右的css選擇器,但是當我運行這個時,並沒有替換任何文本,並返回源代碼。我的代碼中有什麼錯誤? (php)

<?php 

$headerString = 'Content-type: text/plain; charset="utf-8"'; 

header($headerString); 

$file = 'test.css'; 
$cssFile = file_get_contents($file); 

$pattern1 = '/(\.|\#).*(left|right).*[\n| | |\n\n|\n ]\{/'; 

preg_match_all($pattern1, $cssFile, $matches); 

$matches = $matches[0]; 

$patternT = array(); 

$replacementT = array(); 

foreach ($matches as $key1 => $val1) { 
    $patternT[$key1] = preg_replace(array(
      '/\./', 
      '/\#/', 
      '/\:/', 
      '/\,/', 
      '/\(/', 
      '/\)/', 
      '/\//', 
      '/\%/', 
      '/\;/', 
      '/\{/', 
      '/\}/', 
    ), array(
      '\.', 
      '\#', 
      '\:', 
      '\,', 
      '\(', 
      '\)', 
      '\/', 
      '\%', 
      '\;', 
      '\{', 
      '\}', 
    ), $val1); 
} 
foreach ($patternT as $key2 => $val2) { 
    $patternT[$key2] = '/'.$val2.'/'; 
} 

foreach ($matches as $key3 => $val3) { 
    $replacementT[$key3] = preg_replace(array(
      '/right/', 
      '/left/', 
    ), array(
      '123456789right123456789', 
      '123456789left123456789', 

    ), $val3); 
} 
foreach ($replacementT as $key4 => $val4) { 
    $replacementT[$key4] = preg_replace(array(
      '/123456789right123456789/', 
      '/123456789left123456789/', 
    ), array(
      'left', 
      'right', 

    ), $val4); 
} 


//Work  
echo preg_replace($patternT[1], $replacementT[1], $cssFile); 

//Not work 
echo preg_replace($patternT, $replacementT, $cssFile); 

    ?> 
+0

它是在數組中,你應該把它循環.. –

回答

1

所以......等等,你只是想切換leftright彼此?

簡單地說,只是做$out = strtr($in,array("left"=>"right","right"=>"left"));

有這可能與其他事物干擾的可能性 - 例如,如果你在一個背景圖像有leftarrow.png,再變成rightarrow.png ...也許這是一件好事,但如果它不是...

$out = preg_replace_callback("/\b(?:right|left)\b/",function($m) { 
    if($m[0] == "left") return "right"; 
    return "left"; 
},$in); 
0

嘗試在這種情況下使用str_replcae函數,因爲你知道字符串。 我不是JS的忠實球迷,這就是爲什麼我的建議是:

str_replace('/\./', '\.', $pattern1); 

我希望這可以幫助你。 使用循環完成剩下的工作。