Autor Zpráva
Jose
Profil *
zdravim

ako mam cez regex, replace alebo inu funkciu vymazat vsetko pred zatvorkou + zatvorky
napr. mam vypis v PHP 10 EUR (300 Kč) a ja z toho potrebujem dostat len 300 Kč

isto sa to robi cez www.phpf1.com/tutorial/php-regular-expression.html

vdaka za pomoc
Keeehi
Profil
Třeba takto:
echo preg_replace('~\d+ EUR \((\d+) Kč\)~', '$1', $vstup);
Jose
Profil *
Dik a neda sa to nejako univerzalnejsie? Lebo namiesto Kč tam moze byt ina mena napr. Sk
DarkMeni
Profil
když víš, že sou tam ty závorky, a sou tam jen jednou, a ty hledáš celý obsah uvnitř nich, tak tam nemusíš dávat regularní výrazy, ale stačí najít pozici otevření závorky:
<?php
  $string = '10 EUR (300 Kč)';
  echo substr($string, strpos('(', $string), -1);
?>
to by šlo (když sem neudělal někde chybu v syntaxi) kdyby uzavírací závorka byl poslední znak v řetězci, jinak bys tam musel hledat i uzavření závorky a vybrat text mezi nima

preg_match by mohl vypadat:
<?php
  $string = '10 EUR (300 Kč)';
  preg_match('/\(.*?\)/', $string, $match);
  echo $match[1];
  //var_dump($match);
?>

ale myslim že by zpracovávání trvalo dýl (než přes substring) / ten rozdíl při jednom spušnětní nepude vidět, ale třeba při milion krát opakujícím se cyklu už ty milivteřinový odchylky být můžou :D
Jose
Profil *
diky moc a nevies ako by to bolo cez smarty?


regex_replace:'nieco tu ma byt':'/\(.*?\)/'
Jose
Profil *
cez tuto funkciu http://www.smarty.net/docsv2/en/language.modifier.regex.replace.tpl
DarkMeni
Profil
Můžeš to udělat normálně v obyčejným php bez templatu
Smarty neznám, ale tipnu si že by to mělo být:
regex_replace:'/\((.*?)\)/':'$1'
//ale to nevim jestli udělá to, co chceš, takže možná:
regexp_replace:'/.*?\((.*?)\).*?/':'$1'
Když to nechceš přepisovat, jen získat text uvnitř závorek, tak proč na to dáváš replace?
preg_match stačí i když ve smarty by měl asi jinou syntaxi, ale i když používáš template, tak pořát můžeš nějakou část kódu napsat jen v php
Jose
Profil *
to druhe je spravne

dakujem

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