Autor Zpráva
nemeja
Profil
Zdravím, dnes již po druhé,
mám opět problém s regulárama.
$co="GM";
$jak=3;
preg_replace($co."=~.*?~","$co=$jak",$test[1]);

Je to na práci s Ini souborem.
Chyba:
Warning: preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash in C:\wamp\www\server\index.php on line 23
Děkuji za každou odpověd.
Davex
Profil
nemeja:
Delimiter must not be alphanumeric or backslash
Delimiter má být v regulárním výrazu na začátku a na konci. Ty ho máš (~) někde uprostřed a na konci.
nemeja
Profil
ok takže jsem to upravil takto
preg_replace("~$co=(.*?)~","$co=$jak",$test[1]);

mělo by to upravit toto GM=1 na GM=3, ted to upraví na GM=31, chyba mezi židlí a klávesnicí, ale nevím kde :D
Davex
Profil
Podvýrazu (.*?) vyhoví i nic, protože otazníkem na konci přepínáš režim na méně hladový a všechno za rovnítkem už výraz nepozře.
nemeja
Profil
Davex:
OK moc děkuju. Funguje naprosto v pořádku
o_O
Profil
nemeja:
Jen doplním, že na práci s .ini soubory existuje v PHP funkce.
nemeja
Profil
o_O:
I na zápis? Jestli ano, tak mi ji prosím napiš
o_O
Profil
nemeja:
Na zápis pravděpodobně neexistuje. (nenašel jsem)

Dá se však jednoduše vyhledat na internetu:
function write_ini_file($assoc_arr, $path, $has_sections=FALSE) { 
  $content = ""; 
  if($has_sections){ 
    foreach($assoc_arr as $key=>$elem){ 
      $content .= "[".$key."]\n"; 
      foreach($elem as $key2=>$elem2){ 
        if(is_array($elem2)){ 
          for($i=0;$i<count($elem2);$i++){ 
            $content .= $key2."[] = \"".$elem2[$i]."\"\n"; 
          } 
        }elseif($elem2=="")
          $content .= $key2." = \n"; 
        else
          $content .= $key2." = \"".$elem2."\"\n"; 
      } 
    } 
  }else { 
    foreach ($assoc_arr as $key=>$elem){ 
      if(is_array($elem)){ 
        for($i=0;$i<count($elem);$i++){ 
          $content .= $key2."[] = \"".$elem[$i]."\"\n"; 
        } 
      }elseif($elem=="")
        $content .= $key2." = \n"; 
      else 
        $content .= $key2." = \"".$elem."\"\n"; 
    } 
  }
  if(!$handle = fopen($path, 'w')) 
    return false; 
  if(!fwrite($handle, $content)) 
    return false; 
  fclose($handle); 
  return true; 
}
Použití:
$ini = parse_ini_file('test.ini',true);
$ini['sekce']['hodnota']=111;
write_ini_file($ini,'test.ini',true);

Tuto funkci jsem používal před pár lety - možná bude rychlejší ta metoda s preg_replace - nezkoušel jsem.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0