Autor | Zpráva | ||
---|---|---|---|
návštěvník Profil * |
#1 · Zasláno: 14. 1. 2014, 11:18:16
Potřeboval bych poradit jak udělat hromadnou záměnu v řetězci. Řetězec je již profiltrovaný odstranil jsem z něj všechny znaky vyhovující předloze /\W/ a převedl jsem ho na lowercase. V řetězci potřebuju najít slova, která chci nahradit za hvězdičky. Klíčové pro mě je, že počet hvězdiček musí přesně odpovídat počtu alfanumerických znaků ve výskytu. Mám poměrně dlouhou sadu jednoduchých předloh něco jako array(0 => /[zn]?a?beh\w{1,2}// , 1 => /\w{1,3}v[iy]zd/ , ... )
to je jedno jaké předlohy si dosadíte. Jde tedy o to že nalezené slovo, když bude např. zabehnout , nabehnout nebo behat nebo hvizdat, hvizdnout, apod. musí být nahrazeno za odpovídající počet hvězdiček: *******ut , *******ut nebo ***** nebo *****at, *****nout, *******at apod. Jak takovou věc udělat? dá se to udělat pomocí preg_replace? Nebo použít preg_match_all, nasbírat výsledky, zaměnit výsledky za stejný počet hvězdiček a pak provést $tx = preg_replace($preg_patterns,$stars_arr,$tx,-1,$count); |
||
juriad Profil |
Pouzij preg_replace_callback. Zavola tvoji funkci s kazdym vyskytem. Ty ten vyskyt muzes libovolne upravit nebo zmenit.
|
||
návštěvník Profil * |
#3 · Zasláno: 14. 1. 2014, 11:51:53
juriad:
Dělám to podle vzoru: Example #1 preg_replace_callback() and anonymous function http://cz2.php.net/preg_replace_callback a dostávám chybu Parse error: syntax error, unexpected T_FUNCTION $tx = preg_replace_callback( $patterns, function ($matches) { for($i=0; $i<count($matches); $i++): for($j=0; $i<strlen($matches[$i]); $j++): $matches[$i][$j]='*'; endfor; endfor; return $matches; },$tx,-1,$count); |
||
Tori Profil |
#4 · Zasláno: 14. 1. 2014, 12:08:29
návštěvník:
Jestli máte verzi PHP nižší než 5.3, tak si musíte vytvořit pojmenovanou funkci a předat její název jako řetězec. Anonym.fce fungují až od 5.3. |
||
návštěvník Profil * |
#5 · Zasláno: 14. 1. 2014, 12:41:33
Tori:
Díky už mi to funguje: function makeTheStars ($matches) { for($i=0; $i<count($matches); $i++): for($j=0; $j<strlen($matches[$i]); $j++): $matches[$i][$j]='*'; endfor; endfor; return $matches[0]; }; $tx = preg_replace_callback($preg_patterns,'makeTheStars',$tx,-1,$count); |
||
Časová prodleva: 10 let
|
0